k8s集群安装 以及 遇到的常见问题

1.       引言

1.1. 目的

本k8s部署手册,介绍多台服务之间部署k8s部署集群需要的环境以及需要注意的问题。

1.2. 背景

方便多服务器的应用管理

1.3. 读者对象

运维

2.       环境

2.1. 需要部署安装docker(此处略)

 

后端开发人员需要从禅道查看自己的任务计划,从需求工程师那获取需求文档,从数据开发工程师获取数据设计模型后进行后端开发设计,模块开发完成以后进行自测,测试完毕形成swagger接口文档交付给前端和测试人员。

2.2. 关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

2.3. 关闭selinux

setenforce 0

2.4. 关闭swap

swapoff -a

永久禁用swap可以直接修改/etc/fstab文件,注释掉swap项。swapoff -a 只是临时禁用,下次关机重启又恢复原样;

2.5. 设置etc/hosts

vim /etc/hosts



127.0.0.1 localhost

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.180.xxx k8s-01

192.168.180.xxx k8s-02

192.168.180.xxx k8s-03

3.       安装kubernetes(master节点和node节点一样)

3.1. 配置yum源(采用的是国内的镜像源)

​
/etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes Repository

baseurl=kubernetes-yum-repos-kubernetes-el7-x86_64安装包下载_开源镜像站-阿里云

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

exclude=kubelet kubeadm kubectl

​

3.2. 更新yum软件源缓存

yum makecache fast

3.3. 安装kubelet、kubeadm和kubectl

每个节点都要安装

需要指定kube版本,官方提示1.24版本之后,容器运行时不支持docker,因此我们要安装1.23.5版本

使用yum安装时,需要指定版本号

#yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

yum install -y kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5

3.4. 启动kubelet服务

kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务(这里会失败, journalctl -xeu kubelet命令看失败原因, 只有当执行了kubeadm init后才会启动成功)

systemctl enable kubelet & systemctl start kubelet

4. 运行kubeadm init安装master节点

4.1. Master节点kubernetes初始化

#kubeadm init --config=init-config.yaml  #采用此方式还需要改advertiseAddress等信息否则会出现以下安装失败,etcd网络问题,故采用以下方式

​
#kubeadm init  --apiserver-advertise-address=192.168.181.15 --image-repository registry.aliyuncs.com/google_containers  --kubernetes-version v1.23.1 --service-cidr=10.1.0.0/16  --pod-network-cidr=10.244.0.0/16

kubeadm init \
--kubernetes-version=1.23.5 \
--apiserver-advertise-address=192.168.181.197 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

​

注:

1、--apiserver-advertise-address 需要修改为主节点ip

2、--kubernetes-version 版本号与各节点保持一致

3、失败(Init失败原因备注)

5. 子节点安装node

5.1. node节点所在的机器也要按照前置环境的步骤走一遍

5.2. 安装像master那样增加kubernetes的yum源

5.3. 安装kubelet和kubeadm

yum install kubelet kubeadm --disableexcludes=kubernetes

5.4. 运行以下命令,并设置开机启动

systemctl enable docker && systemctl start docker

systemctl enable kubelet && systemctl start kubelet

5.5. 执行join命令

kubeadm join 192.168.181.xx:6443 --token nw5a3y.kwkercgyp0g5he20 \

        --discovery-token-ca-cert-hash sha256:43a737dd067e8caf6718f7ff6a788e833befba89aa44d41c46a5e4c2c6111114

执行这一步失败的话,跟master节点一样排查

5.6. 子节点安装成功

5.7. 安装网络插件 (节点状态改成ready)

# 安装Calico CNI插件

​
  kubectl apply -f "https://docs.projectcalico.org/manifests/calico.yaml"

​

  # 安装weave插件

​
  kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

​

#安装flannel插件

​
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

​

目前我们使用的是flannel插件

5.8. 、验证安装是否成功

5.9. Master节点要删除节点的话执行以下命令

kubectl delete nodes k8s-node1

5.10.  查看pods状态

kubectl get pods --all-namespaces

kubectl get pods

5.11.  查看K8S集群状态

kubectl get cs

6. Init失败原因备注

6.1. Kubeadm  init命令执行时出现 bash: kubeadm :commod not found时

卸载组件以及删除相关镜像

yum erase -y kubelet kubectl kubeadm kubernetes-cni

docker rmi -f  镜像名称

卸载完重新安装

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

6.2. Kubeadm  int  时需要保持 kubelet 驱动与需要启动保持一致

初始化失败通过下面的命令查询失败原因(如果失败大概率是docker和kubelet驱动不一致)

systemctl status kubelet

journalctl -xeu kubelet

驱动有两种cgroupfs和systemd(官方推荐的)

Kubelet和docker的驱动保持一致就可以

Docker驱动修改

vim /etc/docker/daemon.json

"exec-opts": ["native.cgroupdriver=systemd"]

重启docker

systemctl daemon-reload && systemctl restart docker

检查驱动是否已经修改

docker info|grep "Cgroup Driver"

 

Kubelet驱动修改

​
cat > /var/lib/kubelet/config.yaml <<EOF

apiVersion: kubelet.config.k8s.io/v1beta1

kind: KubeletConfiguration

cgroupDriver: systemd

EOF

​

初始化成功

6.3. 执行kubectl错误The connection to the server localhost:8080 was refused

kubectl命令需要使用kubernetes-admin来运行,而node上并没有admin.conf文件。将master上的admin.conf文件拷贝到node,然后执行一下命令

[root@cm-server ~]# cd /etc/kubernetes/

[root@cm-server kubernetes]# ls

bootstrap-kubelet.conf  kubelet.conf  manifests  pki

[root@cm-server kubernetes]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

[root@cm-server kubernetes]# source ~/.bash_profile

再次执行kubectl get pod命令就可以使用了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值