K8s搭建过程,新手闭眼入!!!超详细教程

hotslow 2024-10-25 16:37:02 阅读 87

一、k8s搭建harbor仓库

前提:在另一台主机已搭建好harbor私人仓库,之前博客中有详细记录

环境:准备三台主机,一台master,一台node1,一台node2

一下操作三台主机均需实现

1.本地解析

将harbor镜像仓库所在的主机的域名写在所有主机的本地解析中

2.下载安装docker

三台主机都需安装docker

获取docker软件包

https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/Packages

下载时,会失败

原因:企业9默认安装了runc,与docker冲突,需要先卸载 

<code>[root@k8s-master mnt]# dnf remove -y runc

将镜像拷贝至其他主机

3.编写daemon.json文件

三台主机都需完成此操作 

<code>[root@k8s-master ~]# vim /etc/docker/daemon.json

{

"registry-mirrors":["https://reg.lm.org"]

}

[root@k8s-master ~]# systemctl daemon-reload

[root@k8s-master ~]# systemctl enable --now docker

4.复制harbor仓库中的证书并启动docker

reg.lm.org为harbor仓库的域名

5.登录docker

登录失败

问题:关闭harbor仓库时,某些容器好像会出现问题

解决:重启容器编排!!!!

<code># harbor主机

[root@reg ~]# cd harbor/

[root@reg harbor]# docker compose down

[root@reg harbor]# docker compose up -d

账号和密码在harbor主机的harbor.yml文件中

完成以上操作,三台主机需都具备拉取镜像的能力,如果不具备,则需再仔细检查 

6.从harbor仓库中拉取镜像

二、K8s集群环境搭建

1.三台主机锁住swap交换分区

(1)查看交换分区

<code>[root@k8s-master ~]# systemctl list-unit-files | grep swap

(2)锁住swap.target

(3)注释掉swap分区,避免开机自启

(4)关闭swap

<code>[root@k8s-master ~]# swapoff -a

# 查看,如果什么都没有代表锁住

[root@k8s-master ~]# swapon -s

如果不锁住交换分区,后面kubelet启动不了

3.三台主机安装K8s部署工具

kubelet、kubeadm、kubectl

<code>#部署软件仓库,添加K8S源

[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo

[k8s]

name=k8s

baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm

gpgcheck=0

#安装软件

[root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y

4.三台主机设置kubectl命令补齐功能

[root@k8s-master ~]# dnf install bash-completion -y

[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc

[root@k8s-master ~]# source ~/.bashrc

5.三台主机安装cri-docker

k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker

软件下载:https://github.com/Mirantis/cri-dockerd

[root@k8s-master ~]# dnf install libcgroup-0.41-19.el8.x86_64.rpm cri-dockerd-0.3.14-3.el8.x86_64.rpm -y

[root@k8s-master ~]# vim /lib/systemd/system/cri-docker.service

# 修改

#指定网络插件名称及基础容器镜像

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.lm.org/k8s/pause:3.9

[root@k8s-master ~]# systemctl daemon-reload

[root@k8s-master ~]# systemctl start cri-docker

[root@k8s-master ~]# systemctl enable --now cri-docker

Created symlink /etc/systemd/system/multi-user.target.wants/cri-docker.service → /usr/lib/systemd/system/cri-docker.service.

[root@k8s-master ~]# ll /var/run/cri-dockerd.sock

srw-rw---- 1 root docker 0 Sep 2 15:54 /var/run/cri-dockerd.sock

6.拉取K8s需要的镜像(master)

[root@k8s-master ~]# kubeadm config images pull \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version v1.30.0 \

--cri-socket=unix:///var/run/cri-dockerd.sock

7.上传镜像到harbor仓库(master)

注意:需在harbor仓库中创建项目

<code>[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \

| awk -F "/" '{system("docker tag "$0" reg.lm.org/k8s/"$3)}'

[root@k8s-master ~]# docker images | awk '/k8s/{system("docker push "$1":"$2)}'

# 如果出现错误,删除镜像

docker images | awk '/reg.lm.org/{system("docker rmi "$1":"$2"")}'

8.集群初始化(master)

#启动kubelet服务

[root@k8s-master ~]# systemctl enable --now kubelet

Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /usr/lib/systemd/system/kubelet.service.

#执行初始化命令

[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \

--image-repository reg.lm.org/k8s \

--kubernetes-version v1.30.0 \

--cri-socket=unix:///var/run/cri-dockerd.socke

# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.lm.org/k8s --kubernetes-version v1.30.0 --cri-socket=unix:///var/run/cri-dockerd.sock

#指定集群配置文件变量

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

[root@k8s-master ~]# source ~/.bash_profile

[root@k8s-master ~]# kubectl get node

NAME STATUS ROLES AGE VERSION

k8s-master NotReady control-plane 4m25s v1.30.0.0

状态为NotReady,需要网络插件

如果出现以下问题,是因为内存和cpu给的不够,需要增加

9.安装flannel网络插件(master)

官方网站:https://github.com/flannel-io/flannel

获取到镜像包后,加载至docker镜像

<code>docker load -i flannel/flannel:v0.25.5

docker load -i flannel/flannel-cni-plugin:v1.5.1-flannel1

#上传镜像到仓库

[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.lm.org/flannel/flannel:v0.25.5

[root@k8s-master ~]# docker push reg.lm.org/flannel/flannel:v0.25.5

[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.lm.org/flannel/flannel-cni-plugin:v1.5.1-flannel1

[root@k8s-master ~]# docker push reg.lm.org/flannel/flannel-cni-plugin:v1.5.1-flannel1

#编辑kube-flannel.yml 修改镜像下载位置

[root@k8s-master ~]# vim kube-flannel.yml

#需要修改以下几行

[root@k8s-master ~]# grep -n image kube-flannel.yml

146: image: flannel/flannel:v0.25.5

173: image: flannel/flannel-cni-plugin:v1.5.1-flannel1

184: image: flannel/flannel:v0.25.5

#安装flannel网络插件

[root@k8s-master ~]# kubectl apply -f kube-flannel.yml

10.在master获取节点状态

[root@k8s-master ~]# kubectl get node

NAME STATUS ROLES AGE VERSION

k8s-master Ready control-plane 4h47m v1.30.0

11.重新生成集群token

[root@k8s-master mnt]# kubeadm token create --print-join-command

kubeadm join 172.25.254.100:6443 --token tmw6jn.2v2hro4pobvni3i2 --discovery-token-ca-cert-hash sha256:8c66e241ac48ec9f808c3445e7faac50a6063d2065039c6cfcc8ae16dbfeda69

三、节点扩容

思路:

在所有的worker节点中

1 确认部署好以下内容

2 禁用swap

3 安装:

- kubelet-1.30.0

- kubeadm-1.30.0 

- kubectl-1.30.0 

- docker-ce

- cri-dockerd

4 修改cri-dockerd启动文件添加 

- --network-plugin=cni

- --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9

5 开机自启服务

- cri-docker.service

systemctl enable --now cri-docker

- kubelet.service

systemctl enable --now kubelet

节点加入集群 

[root@k8s-node1 ~]# kubeadm join 172.25.254.100:6443 --token tmw6jn.2v2hro4pobvni3i2 --discovery-token-ca-cert-hash sha256:8c66e241ac48ec9f808c3445e7faac50a6063d2065039c6cfcc8ae16dbfeda69 --cri-socket=unix:///var/run/cri-dockerd.sock

[root@k8s-node2 ~]# kubeadm join 172.25.254.100:6443 --token tmw6jn.2v2hro4pobvni3i2 --discovery-token-ca-cert-hash sha256:8c66e241ac48ec9f808c3445e7faac50a6063d2065039c6cfcc8ae16dbfeda69 --cri-socket=unix:///var/run/cri-dockerd.sock

注:当加入集群后,会自动开启kubelet

在master查看node状态

[root@k8s-master ~]# kubectl get nodes

NAME STATUS ROLES AGE VERSION

k8s-master Ready control-plane 5h8m v1.30.0

k8s-node1 Ready <none> 4h18m v1.30.0

k8s-node2 Ready <none> 3h55m v1.30.0

完成以上操作,就算是部署K8s完成了

我们再来测试一下

#建立一个pod

[root@k8s-master ~]# kubectl run test --image nginx

pod/test created

#查看pod状态

[root@k8s-master ~]# kubectl get pods

NAME READY STATUS RESTARTS AGE

test 0/1 ContainerCreating 0 13s

#删除pod

[root@k8s-master ~]# kubectl delete pod test



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。