2.6 环境初始化 2.6.1 检查操作系统的版本 1 2 3 [root @master ~] Centos Linux 7.5 .1804 (Core)
2.6.2 主机名解析 为了方便集群节点间的直接调用,在这个配置一下主机名解析,企业中推荐使用内部DNS服务器
1 2 3 4 192.168 .90.100 master192.168 .90.106 node1192.168 .90.107 node2
2.6.3 时间同步 kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间
企业中建议配置内部的会见同步服务器
1 2 3 4 [root @master ~] [root @master ~] [root @master ~]
2.6.4 禁用iptable和firewalld服务 kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则
1 2 3 4 5 6 [root @master ~] [root @master ~] [root @master ~] [root @master ~]
2.6.5 禁用selinux selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题
2.6.6 禁用swap分区 swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
1 2 3 4 5 vim /etc/fstab 注释掉 /dev/mapper/centos-swap swap
2.6.7 修改linux的内核参数 1 2 3 4 5 6 7 8 9 10 11 12 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 [root @master ~] [root @master ~] [root @master ~]
2.6.8 配置ipvs功能 在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root @master ~] [root @master ~] modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF [root @master ~] [root @master ~] [root @master ~]
2.6.9 安装docker 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root @master ~] [root @master ~] [root @master ~] [root @master ~] [root @master ~] { "exec-opts" : ["native.cgroupdriver=systemd" ], "registry-mirrors" : ["https://kn0t2bca.mirror.aliyuncs.com" ] } EOF [root @master ~] [root @master ~]
2.6.10 安装Kubernetes组件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [kubernetes ] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgchech=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key .gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key .gpg [root @master ~] KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" [root @master ~]
2.6.11 准备集群镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root @master ~] images=( kube-apiserver :v1.17.4 kube-controller-manager :v1.17.4 kube-scheduler :v1.17.4 kube-proxy :v1.17.4 pause:3.1 etcd:3.4 .3 -0 coredns:1.6 .5 ) for imageName in $ {images[@ ]};do docker pull registry.cn-hangzhou .aliyuncs.com/google_containers/$imageName docker tag registry.cn-hangzhou .aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.cn-hangzhou .aliyuncs.com/google_containers/$imageName done
2.6.11 集群初始化
下面的操作只需要在master节点上执行即可
1 2 3 4 5 6 7 8 9 10 11 [root @master ~] --apiserver-advertise-address =192.168 .169.100 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version =v1.17.4 \ --service-cidr =10.96 .0.0 /12 \ --pod-network-cidr =10.244 .0.0 /16 [root @master ~] [root @master ~] [root @master ~]
下面的操作只需要在node节点上执行即可
1 2 kubeadm join 192.168 .0.100 :6443 --token awk15p.t6bamck54w69u4s8 \ --discovery-token-ca-cert-hash sha256:a94fa09562466d32d29523ab6cff122186f1127599fa4dcd5fa0152694f17117
在master上查看节点信息
1 2 3 4 5 [root @master ~] NAME STATUS ROLES AGE VERSION master NotReady master 6 m v1.17.4 node1 NotReady <none> 22 s v1.17.4 node2 NotReady <none> 19 s v1.17.4
2.6.13 安装网络插件,只在master节点操作即可 1 wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel .yml
由于外网不好访问,如果出现无法访问的情况,可以直接用下面的 记得文件名是kube-flannel.yml,位置:/root/kube-flannel.yml内容:
1 https://github.com/flannel-io /flannel/tree/master/Documentation/kube-flannel .yml
也可手动拉取指定版本 docker pull quay.io/coreos/flannel:v0.14.0 #拉取flannel网络,三台主机 docker images #查看仓库是否拉去下来
个人笔记
若是集群状态一直是 notready,用下面语句查看原因, journalctl -f -u kubelet.service 若原因是: cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d mkdir -p /etc/cni/net.d #创建目录给flannel做配置文件 vim /etc/cni/net.d/10-flannel.conf #编写配置文件
1 2 3 4 5 6 7 8 9 10 11 { "name" :"cbr0" , "cniVersion" :"0.3.1" , "type" :"flannel" , "deledate" :{ "hairpinMode" :true, "isDefaultGateway" :true } }
2.6.14 使用kubeadm reset重置集群 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #在master节点之外的节点进行操作 kubeadm reset systemctl stop kubelet systemctl stop docker rm -rf /var/lib/cni/ rm -rf /var/lib/kubelet/* rm -rf /etc/cni/ ifconfig cni0 down ifconfig flannel.1 down ifconfig docker0 down ip link delete cni0 ip link delete flannel.1 ##重启kubelet systemctl restart kubelet ##重启docker systemctl restart docker
2.6.15 重启kubelet和docker 1 2 3 4 systemctl restart kubelet systemctl restart docker
使用配置文件启动fannel
1 kubectl apply -f kube-flannel .yml
等待它安装完毕 发现已经是 集群的状态已经是Ready
2.6.16 kubeadm中的命令
2.7 集群测试 2.7.1 创建一个nginx服务 1 kubectl create deployment nginx --image =nginx:1.14 -alpine
2.7.2 暴露端口 1 kubectl expose deploy nginx --port =80 --target-port =80 --type =NodePort
2.7.3 查看服务
2.7.4 查看pod
浏览器测试结果: