4.2 k8s完整安装(二)

170 阅读4分钟

这是我参与2022首次更文挑战的第31天,活动详情查看:2022首次更文挑战

第五步:添加k8s安装源和docker安装源

添加k8s安装源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
复制代码

添加docker安装源

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
复制代码

第六步:安装k8s组件

yum install -y kubelet kubeadm kubectl docker-ce
复制代码

三台服务器都安装。

第七步:启动kubelet、docker,并设置开机启动

systemctl enable kubelet
systemctl start kubelet
  
systemctl enable docker
systemctl start docker
复制代码

Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kuberntes运行时环境,主要完成以下使命: 1.监视分配给该Node节点的pods 2.挂载pod所需要的volumes 3.下载pod的secret 4.通过docker/rkt来运行pod中的容器 5.周期的执行pod中为容器定义的liveness探针 6.上报pod的状态给系统的其他组件 7.上报Node的状态

一定要检查kubelet的状态是否正常

systemctl status kubelet
复制代码

image

这是启动成功的状态。

我在启动kubelet这里遇到的麻烦,总是提示启动失败。各种排查都没有找到原因。最后卸载重新安装了,记录一下卸载流程

第一步:我使用的yum install安装的,所以卸载使用 yum remove

yum -y remove   //-y表示又询问都是yes
复制代码

第二步:查看kubelet包在linux中是否存在

yum list kubelet
复制代码

我们看到包还在,原因是软件卸载了,并没有删除软件包

第三步:检查删除的状态

systemctl status kubelet
复制代码

状态提示:

Warning: kubelet.service changed on disk. Run 'systemctl daemon-reload' to reload units.
复制代码

第四步:验证删除成功

执行systemctl daemon-reload

systemctl daemon-reload
复制代码

执行完以后在查询状态

systemctl status kubelet
复制代码

Unit kubelet.service could not be found.

第五步:重新安装

yum -y install kubelet
复制代码

第六步:启动kubelet,并开机启动

systemctl enable kubelet
systemctl start kubelet
复制代码

第八步:修改docker配置

kuberneters官方推荐docker等使用systemd作为cgroupdriver,否则kubelet启动不了

​
cat <<EOF > /etc/docker/deamon.json
{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
复制代码

重启docker

// 守护进程重启
systemctl daemon-reload
systemctl restart docker
复制代码

验证docker的Cgroup是否是systemd

docker info |grep Cgroup
复制代码

应该返回如下内容

[root@node1~]# docker info |grep Cgroup
Cgroup Driver: systemd
#docker驱动程序为 systemd
复制代码

第九步:用kubeadm来初始化集群

注意:这个命令仅在master节点执行

1)初始化集群控制台, 失败了可以用kubeadm reset重置

注意:只在主节点运行
kubeadm init --kubernetes-version=1.23.4 \
--apiserver-advertise-address=10.211.55.200 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
  
复制代码
  • 执行了这个命令以后,会帮我们创建集群的控制台

  • --image-repository registry.aliyuncs.com/google_containers 指定镜像源,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过--image-repository指定阿里云镜像仓库地址

  • --kubernetes-version:版本信息 kubectl version 查询

  • 定义POD的网段为: 10.244.0.0/16

  • apiserver地址就是master本机IP地址

  • --service-cidr=10.96.0.0/12 : 这个参数后的IP地址直接就套用10.96.0.0/12 ,以后安装时也套用即可,不要更改

    --pod-network-cidr=10.244.0.0/16 : k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16

初始化失败的可以重置,使用命令

kubeadm reset
复制代码

重置以后会有这样一段提示

The reset process does not clean your kubeconfig files and you must remove them manually. Please, check the contents of the $HOME/.kube/config file.

意思是kubeadm reset 执行后不会删除HOME/.kube文件,需要手动执行rm−rfHOME/.kube文件,需要手动执行rm -rf HOME/.kube文件,需要手动执行rm−rfHOME/.kube

然后重新初始化。

初始化的过程中异常记录

异常1:

image

It seems like the kubelet isn't running or healthy.

首先可以用命令检查kubelet的状态

systemctl status kubelet
复制代码

状态返回异常

image

然后看日志,看看日志包的什么错?

journalctl -xefu kubelet
复制代码

image

日志说的很清楚,没有找到/var/lib/kubelet/config.yaml文件

这个问题最后我卸载了kubelet,然后重新装了一遍就好了。