kubernetes实验
添加root用户
zzs@master:~$ sudo passwd root
更改镜像源
root@master:/etc/apt# vim sources.list #清除全部内容ggdG deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu xenial-security universe deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse
禁止防火墙:# ufw disable
root@master:/etc/apt# ufw disable Firewall stopped and disabled on system startup
关闭 swap:
root@master:/etc/apt# cat /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # ## / was on /dev/sda1 during installation UUID=4ac71650-5c12-4eb7-9ae5-435e4e538015 / ext4 errors=remount-ro 0 1 # swap was on /dev/sda5 during installation #UUID=4fa6c3dd-b33c-4790-ae43-f2c30addcb38 none swap sw 0 0
禁止 selinux:
apt-get update root@master:/etc/apt# apt install -y selinux-utils root@master:/etc/apt# setenforce 0 setenforce: SELinux is disabled root@master:/etc/apt# setenforce -r now usage: setenforce [ Enforcing | Permissive | 1 | 0 ] root@master:/etc/apt# getenforce Disabled
克隆虚拟机为node1,node2两个节点。
修改主机名
vim /etc/hostnae vim /etc/hosts安装docker
apt-get update apt-get install -y curl telnet wget man apt-transport-https ca-certificates software-properties-common vim libltdl7
(https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce_18.06.1ce3-0~ubuntu_amd64.deb)
dpkg -i /home/zzs/docker-ce_18.06.1~ce~3-0~ubuntu_amd64.deb docker version # systemctl enable docker # systemctl start docker # systemctl status docker docker -v
root@master:/home/zzs# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://h7l6c354.mirror.aliyuncs.com"]
}
root@master:/home/zzs# systemctl daemon-reload
root@master:/home/zzs# systemctl restart docker
zzs@master:~$ sudo groupadd docker
zzs@master:~$ sudo usermod -aG docker $USER
安装 Kubernetes
Kubernetes 版本:k8s 1.13.1
配置 k8s 镜像加速器创建文件/etc/apt/sources.list.d/kubernetes.list,内容如下:
root@master:/# vim /etc/apt/sources.list.d/kubernetes.list deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
apt update 更新操作系统源
gpg --keyserver keyserver.ubuntu.com --recv-keys 836F4BEB gpg --export --armor 836F4BEB | sudo apt-key add - apt updatekubernetes 系统网络配置:
创建/etc/sysctl.d/k8s.conf 文件,内容如下:
root@master:/# cat /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 vm.swappiness = 0
(将 k8s 通信网络添加到 iptables 中)
使配置文件生效:
root@master:/# modprobe br_netfilter root@master:/# sysctl -p /etc/sysctl.d/k8s.conf
安装 k8s
apt update apt-get install -y kubelet=1.13.1-00 kubernetes-cni=0.6.0-00 kubeadm=1.13.1-00 kubectl=1.13.1-00 systemctl enable kubelet systemctl start kubelet shutdown -r now配置 master 1) 创建工作目录
$ mkdir /home/hj/working $ cd /home/hj/working/2) 创建 kubeadm.conf 配置文件
创建 k8s 的管理工具 kubeadm 对应的配置文件
/home/hj/working/目录下,生成配置文件:
kubeadm config print init-defaults ClusterConfiguration > kubeadm.conf
通过在 kubeadm 配置文件中指定 docker 仓库地址,便于内网快速部署。
修改 kubeadm.conf:
修改 imageRepository: k8s.gcr.io为
imageRepository: registry.cn-beijing.aliyuncs.com/imcto
修改 kubernetes 版本 kubernetesVersion: v1.13.0改为
kubernetesVersion: v1.13.1
修改 kubeadm.conf 中的 API 服务器地址,后面会频繁使用这个地址。
localAPIEndpoint: advertiseAddress: 192.168.10.133 (master 主机的 ip 地址) bindPort: 6443
配置子网网络:
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
这里的 10.244.0.0/16 和 10.96.0.0/12 分别是 k8s 内部 pods 和 services 的子
网网络,最好使用这个地址,后续 flannel 网络需要用到。
查看一下都需要哪些镜像文件需要拉取:
kubeadm config images list --config kubeadm.conf
拉取镜像,下载全部当前版本的 k8s 所关联的镜像:
kubeadm config images pull --config ./kubeadm.conf4) 初始化 kubernetes 环境:
#初始化并且启动
kubeadm init --config ./kubeadm.conf
注:这里会生成一个 token,需要记住。例如:abcdef.0123456789abcdef
更多 kubeadm 配置文件参数详见
kubeadm config print-defaults
k8s 启动成功输出内容较多,但是记住末尾的内容, 按照官方提示,执行以下操
作:
1、执行如下命令
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config5) 验证 kubernetes 启动结果:
验证输入,注意显示 master 状态是 NotReady,证明初始化服务器成功
zzs@master:~/working$ kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 12m v1.13.1
目前只有一个 master,还没有 node,而且是 NotReady 状态,那么我们需要将 node
加入到 master 管理的集群中来。在加入之前,我们需要先配置 k8s 集群的内部通信网
络,这里采用的是 flannel 网络。
zzs@master:~$ cd $HOME/working wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/documentation/kube-flannel.yml
编辑这个 kube-flannel.yml 文件,确保 flannel 网络是对的,找到 net-conf.json 标记
的内容是否正确。
net-conf.json: |
{ "Network": "10.244.0.0/16", "Backend":
{ "Type": "vxlan"
}
这个"10.244.0.0/16"和 ./kubeadm.conf 中的 podsubnet 的地址要一致。
应用当前 flannel 配置文件
zzs@master:~/working$ kubectl apply -f kube-flannel.yml
安装 flannel 网络后 执行 kubectl get nodes 输出结果如下
zzs@master:~/working$ systemctl restart kubelet zzs@master:~/working$ kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 8h v1.13.1
(此时 master 已经是 Ready 状态了,表示已经配置成功了,那么我们就需要配置
node 来加入这个集群。)
关闭 swap
禁止 selinux
关闭防火墙
启动 k8s 后台服务:
systemctl enable kubelet systemctl start kubelet
将 master 机器的/etc/kubernetes/admin.conf 拷贝一份到 node1 和 node2:(写自己的IP地址和目录)
sudo scp /etc/kubernetes/admin.conf zzs@192.168.10.132:/home/zzs/ sudo scp /etc/kubernetes/admin.conf zzs@192.168.10.131:/home/zzs/
登录 node 终端,创建基础 kube 配置文件环境
zzs@node1:~$ mkdir -p $HOME/.kube zzs@node1:~$ sudo cp -i $HOME/admin.conf $HOME/.kube/config zzs@node1:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
node1 和 node2 分别连接 master 加入 master 集群。这里用的是 kubeadm join
指令:
zzs@node1:~/.kube$ sudo kubeadm join 192.168.10.133:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:66326cad87851e64a1652326184361e61085ccdbe839bbee7dcf9330bb7366c6
这里要注意,使用的 hash 应该是 master 主机 kubeadm init 成功之后生
成的 hash 码。
如果忘记 hash 码: root@master:~/.kube# kubeadm token create --print-join-command --ttl 0 root@master:~/.kube# kubeadm token list
应用两个 node 主机分别应用 flannel 网络
将 master 中的 kube-flannel.yml 分别传递给两个 node 节点.
sudo scp /home/zzs/working/kube-flannel.yml zzs@192.168.10.132:/home/zzs/ sudo scp /home/zzs/working/kube-flannel.yml zzs@192.168.10.131:/home/zzs/
分别启动 flannel 网络
zzs@node1:~$ kubectl apply -f kube-flannel.yml zzs@node2:~$ kubectl apply -f kube-flannel.yml
查看 node 是否已经加入到 k8s 集群中(需要等一段时间才能ready
zzs@master:~/working$ kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 9h v1.13.1 node1 Ready9m28s v1.13.1 node2 Ready 8m49s v1.13.1



