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 
也可手动拉取指定版本
个人笔记
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 
浏览器测试结果: