1、环境说明
Linux version 3.10.0-1160.el7.x86_64
mockbuild@x86-vm-26.build.eng.bos.redhat.com
gcc version 4.8.5 20150623
Red Hat 4.8.5-39
2、前期准备
**两台虚拟机:**分别是master节点(168.63.25.162)和node节点(168.63.25.163).
安装过程为了避免麻烦可以尽量使用root来执行命令。(使用命令
sudo su
).
相关文件准备
-
将k8s-master-cert.sh、kubeadm-init.yaml、kube-flannel.yml上传至master节点上
-
将images目录下的tar全部上传至master节点上(如果没有可以通过wget http://168.63.124.50:18088/kubeadm/flannel.tar 下载)
-
将images目录下的flannel.tar、kube-proxy.tar上传所有node节点上
网络等系统参数准备
-
# 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld # 临时生效 setenforce 0 # 永久有效 sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux swapoff -a sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
-
# 开启路由转发 touch /etc/sysctl.d/k8s.conf cat > /etc/sysctl.d/k8s.conf <<EOF vm.swappiness = 0 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF # 加载配置文件 modprobe br_netfilter sysctl -p /etc/sysctl.d/k8s.conf ####加载IPVS模块 cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
3、master节点安装docker(离线)
-
获取kubeadm-rpm,解压,进入rpm目录,安装container-selinux
[root@168-63-25-162 ~]# wget http://1.1.1.1:18088/kubeadm/kubeadm-rpm.tar.gz tar -xzvf kubeadm-rpm.tar.gz rpm -ivh container*.rpm
-
之后参考官网操作安装docker操作。
-
配置docker,目前k8s推荐使用的docker文件驱动是systemd
mkdir /etc/docker cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF
-
启动docker服务
systemctl daemon-reload systemctl start docker.service systemctl enable docker.service systemctl status docker.service
-
检查docker信息
[root@168-63-25-162 ~]# docker info Containers: 19 Running: 16 Paused: 0 Stopped: 3 Images: 8 Server Version: 18.06.1-ce Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: systemd Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e runc version: 69663f0bd4b60df09991c08812a60108003fa340 init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 3.10.0-1160.el7.x86_64 Operating System: Red Hat Enterprise Linux Server 7.9 (Maipo) OSType: linux Architecture: x86_64 CPUs: 8 Total Memory: 15.51GiB Name: 168-63-25-162 ID: B5MQ:VRT6:6ZAP:5YGM:BC7G:EYO2:RARR:3ZZD:PCRZ:Z2VZ:ZP7I:QSFH Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
4、master节点安装kubeadm,kubelet, kubectl(离线)
-
在
/etc/yum.repos.d/
创建kubeadm.repotouch kubeadm.repo # 写入 cat > /etc/yum.repos.d/kubeadm.repo <<EOF [kubeadm] name=centos7 baseurl=http://168.63.124.50:8080/rpm/ enabled=1 gpgcheck=0 EOF
-
安装三者
yum install -y kubelet-1.16.3 kubeadm-1.16.3 kubectl-1.16.3 systemctl enable kubelet
-
修改上传的kubeadm配置文件中**
advertiseAddress
和controlPlaneEndpoint
参数值** -
导入镜像
docker load -i kubeadm-master.tar
-
初始化master节点(注意将上面的加入集群的命令保存下面,如果忘记保存上面的 token 和 sha256 值的话也不用担心,我们可以使用命令
kubeadm token list
来查找)kubeadm init --config=kubeadm-init.yaml
-
按照上述提示配置环境变量
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
-
查看集群状态
[root@168-63-25-162 ~]# kubectl get csNAME AGEcontroller-manager <unknown>scheduler <unknown>etcd-0 <unknown>[root@168-63-25-162 ~]# kubectl get pod -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-67c766df46-qtw2l 0/1 Pending 0 2m27scoredns-67c766df46-w5b54 0/1 Pending 0 2m27setcd-168-63-25-162 1/1 Running 0 102skube-apiserver-168-63-25-162 1/1 Running 0 80skube-controller-manager-168-63-25-162 1/1 Running 0 92skube-proxy-ln5bn 1/1 Running 0 2m27skube-scheduler-168-63-25-162 1/1 Running 0 108s
5、master节点安装集群网络(离线)
-
根据初始化提示,安装flannel
kubectl apply -f kube-flannel.yml
-
之后集群状态中有关coredns的状态将会改变,如下所示:
kubectl get pod -n kube-system
6、node节点安装docker(离线)
- 同master节点安装步骤
7、 node节点导入基础镜像,安装kubelet,kubeadm,kubectl
-
导入基础镜像kube-proxy
docker load -i kube-proxy.tar
-
在
/etc/yum.repos.d/
创建kubeadm.repotouch kubeadm.repo# 写入cat > /etc/yum.repos.d/kubeadm.repo <<EOF[kubeadm]name=centos7baseurl=http://168.63.124.50:8080/rpm/enabled=1gpgcheck=0EOF
-
安装kubelet,kubeadm,kubectl
yum install -y kubelet-1.16.3 kubeadm-1.16.3 kubectl-1.16.3systemctl enable kubelet
-
根据master中kubeadm初始化提示,在master节点中,运行以下指令,将master节点中的证书和公钥复制到node节点中
scp /etc/kubernetes/pki/ca.* root@168.63.25.163:/etc/kubernetes/pki/scp /etc/kubernetes/pki/sa.* root@168.63.25.163:/etc/kubernetes/pki/scp /etc/kubernetes/pki/front-proxy-ca.* root@168.63.25.163:/etc/kubernetes/pki/scp /etc/kubernetes/pki/etcd/ca.* root@168.63.25.163:/etc/kubernetes/pki/etcd/
-
在node节点运行添加指令,加入集群
kubeadm join 168.63.25.162:6443 --token abcdef.0123456789abcdef --discovery-to1d1152e6ad1f3bf --control-plane
8、检查node节点状态
- kubectl get nodes
9、菜坑大合集
-
kubeadm init
时出现下面错误
原因是:交换分区没有关闭,可以使用永久关闭指令消除错误(如第2节所述)
-
kubeadm init
时出现下面错误原因:1、由于docker和k8s都需要配置cgroup driver,在docker中使用如下指令就可以知道,但是k8s中推荐使用的是systemd,如果没有配置docker,就会有上述问题。
docker info |grep CgroupCgroup Driver: cgroupfs
可以通过如下方式找到配置文件所在位置,然后修改其中的10-kubeadm.conf中的cgroup项即可。
2、同第一个坑。
-
Failed to start containerd: exec: “containerd”: executable file not found in $PATH
解决方案:重装。。。。。
-
kubeadm reset之后,重新init提示端口被占用,kill掉就行
-
Unable to connect to the server: x509: certificate signed by unknown authority
原因:下面命令创建一个目录,并复制几个配置文件,重新创建集群时,这个目录还是存在的,解决方法就是在执行这几个命令前执行此命令:
rm -rf $HOME/.kube
删除这个目录。mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
-
节点状态是notReady。
原因:可能的原因是网络问题,如下所示:
解决,现在是ready了
-
证书没有发放
解决方法:证书在这里,然后把证书复制过去即可。
-
master主节点初始化报错 /proc/sys/net/ipv4/ip_forward contents are not set to 1
处理方法:echo 1 > /proc/sys/net/ipv4/ip_forward