centos7部署k8s集群
1、环境说明
操作系统:centos7
matser节点:192.168.124.76
node1节点:192.168.124.97
2、前置必操作步骤
2.1、关闭防火墙
systemctl stop firewalld #关闭防火墙 systemctl disable firewalld #永久关闭防火墙
2.2、关闭selinux
setenforce 0 #关闭selinux
永久关闭,编辑配置文件:
vi /etc/sysconfig/selinux #编辑文件
SELINUX=disable #将enforcing修改为disable
2.3、永久关闭swap
swapoff -a #临时关闭swapoff
永久关闭:
vim /etc/fstab
注释掉关于swap这一行,如下图:
2.4、添加主机名称
vi /etc/hosts
添加以下内容:(将master节点和node节点的ip和主机名称一一映射配置)
强调:此操作master节点和node节点配置一致
2.5、将桥接的IPV4流量传递到iptables链
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
执行完成执行以下命令生效:
sysctl --system
2.6、同步时间
注意!不同步时间会导致节点加入集群失败报错
yum intsall ntpdate #安装时间同步软件 ntpdate time.nist.gov #同步网络时间
hwclock -w #同步后调整硬件时间
3、docker安装设置
3.1、下载安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo #下载 yum -y install docker-ce-18.06.1.ce-3.el7 #执行安装
3.2、docker设置开启自启动/启动
systemctl enable docker #设置开启自启动 systemctl start docker #启动docker
docker --version #查看版本
4、kubeadm、kubectl、kubelet安装
4.1、添加阿里源
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
4.2、安装kubeadm、kubectl、kubelet
安装指定版本,这里装的是1.19.2:
yum install cri-tools-1.19.2-0.x86_64 --nogpgcheck yum install kubectl-1.19.2-0.x86_64 --nogpgcheck yum install kubeadm-1.19.2-0.x86_64 --nogpgcheck
设置开机自启动
systemctl enable kubelet
5、master节点部署
5.1、初始化master
kubeadm init \ --apiserver-advertise-address=192.168.124.76 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.19.2 \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16
参数说明:
--apiserver-advertise-address:填写master主节点的ip
--kubernetes-version:填写安装的kubernetes版本
--service-cidr:指定service网络地址范围不能选取与本机网络重叠或者冲突
--pod-network-cidr: 指定pod网络地址范围
注意:pod cidr和service cidr和本机网段需要注意三者之间网络无重叠冲突即可
初始化成功标志:
建议至少2 cpu ,2G,非硬性要求,1cpu,1G也可以搭建起集群。但是: 1个cpu的话初始化master的时候会报 [WARNING NumCPU]: the number of available CPUs 1 is less than the required 2 部署插件或者pod时可能会报warning:FailedScheduling:Insufficient cpu, Insufficient memory 如果出现这种提示,说明你的虚拟机分配的CPU为1核,需要重新设置虚拟机master节点内核数。
执行命令:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行命令,发现mstaer节点状态status为NOTready,这是因为没安装网络插件
kubectl get node
5.2、安装flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
执行安装命令失败,报错:The connection to the server raw.githubusercontent.com was refused - did you specify the right host or port?
可能是因为外网无法访问,可通过以下操作解决此问题:
1、浏览器访问:https://www.ipaddress.com
查询此域名的实际ip:raw.githubusercontent.com
添加到hosts文件:
vi /etc/hosts #编辑配置文件 199.232.68.133 raw.githubusercontent.com #添加此行内容(记得ip换成查到的真实ip)
2、重启执行安装命令,可查看到安装成功
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
如下图:
3、查看是否安装成功,执行以下命令:
kubectl get pods -n kube-system
4、再次查看node,可以看到状态为ready
kubectl get node
6、node节点部署
注意!!!node节点机器需要执行标题1/2/3/4的步骤
6.1、更改docker的启动参数
为了避免执行node加入集群报错:
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https:/ /kubernetes.io/docs/setup/cri/
vi /usr/lib/systemd/system/docker.service #编辑配置文件
#ExecStart=/usr/bin/dockerd #注释掉这一行 ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd #新增这行
重启docker:
systemctl daemon-reload systemctl restart docker
6.2、node加入集群
在node节点执行以下命令:
kubeadm join 192.168.124.76:6443 --token 3pmo8v.vg0tgxmdsh8wzm1f \ --discovery-token-ca-cert-hash sha256:ceab6d527e56718ea85bc7d90842443b728094ce559dc61fa3123e6916c7e907
执行成功如下图:
注意!!!如果token忘记或失效,可在master节点机器执行以下命令重新获取生成token和ca证书
#生成新token
kubeadm token create #获取ca证书sha256编码hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
然后在node节点重新执行加入集群命令:
kubeadm join 192.168.124.76:6443 --token 3pmo8v.vg0tgxmdsh8wzm1f \ --discovery-token-ca-cert-hash sha256:ceab6d527e56718ea85bc7d90842443b728094ce559dc61fa3123e6916c7e907
6.3、master节点文件拷贝到node节点
1)将matser节点的/etc/kubernetes/admin.conf拷贝到node节点相同目录下
在master节点执行此命令,可使用scp -r命令直接拷贝:
#格式如下:
scp -r user@node节点ip:/etc/kubernetes/admin.conf /etc/kubernetes/
scp -r root@192.168.124.97:/etc/kubernetes/admin.conf /etc/kubernetes/ #执行此命令后,输入登录密码可直接完成拷贝
2)配置环境变量生效
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile source ~/.bash_profile
3)执行以下命令查看node,可发现已成功加入集群,且状态为Ready
kubectl get node
至此,k8s的一个简单的集群就搭建完成了~
7、遇到问题解决
7.1、安装失败,彻底清理环境重新安装
#执行以下操作
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
systemctl restart kubelet #重启kubelet
systemctl restart docker #重启docker
7.2、node节点加入集群失败
node节点加入集群报错若如下,是时间不同步问题,按照标题2.6将每台机器的时间进行同步
7.3、查看组件状态kubevtl get cs显示unhealthy
1)可先确认10251、10252端口是否有开启
执行命令j进行查看:
netstat -tunlp
2)检查/etc/kubernetes/manifests/kube-scheduler.yaml和/etc/kubernetes/manifests/kube-controller-manager.yaml这两个文件
删除去掉--port=0这一行,保存生效
3)重启kubelet组件
systemctl restart kubelet
4)再次查看组件,显示正常