CentOS 9安装Kubernetes(k8s)集群

打印 上一主题 下一主题

主题 915|帖子 915|积分 2745

前言

1、版本说明
   体系版本:CentOS 9
  k8s版本:v1.29.5
  docker版本:26.1.3
  harbor:v2.9.4
  2、提前预备好1台假造机,可以参考博客:Vmware 17安装 CentOS9
3、假造机提前安装好docker,参考博客:CentOS7安装docker以及docker-compose
4、假如部署k8s集群的时候使用个人的镜像堆栈,请提前部署好,本人使用的是harbor搭建的私有堆栈,可以参考博客:搭建Harbor镜像堆栈
5、集群部署参考官方文档:使用 kubeadm 创建集群 | Kubernetes 
6、集群中的网络插件安装文档参考:Calico网络插件安装
7、以下是本人4台假造机的ip地点以及主机名信息,其中一台为镜像堆栈
节点主机名ip
主节点k8s-master192.168.65.130
节点1k8s-node1192.168.65.131
节点2k8s-node2192.168.65.132
私有镜像堆栈k8s-harbor192.168.65.135
三台假造机环境预备

克隆3台假造机

我这里已经安装好了一台CentOS 9的假造机,并且此假造机已经安装好了docker环境,在此假造机底子上克隆出来3台。
1、开始克隆


2、直接下一步

3、选择假造机中的当前状态,然后点击下一步

4、选择创建完备克隆,点击下一步

5、输入假造机名称,选择存储位置,点击完成

 6、等待克隆完成,点击关闭

7、重复步骤1-6,克隆出另外2台假造机,我的另外两台假造机名称分别为node1和 node2,克隆完成后如下,总共3台

修改假造机信息

修改假造机的 mac地点

1、点击编辑假造机设置

2、硬件-----网络适配器-----高级
3、点击生成,生成新的mac地点 ,然后点击确定

 4、点击处置惩罚器,勾选假造化引擎,然后点击确定

5、重复步骤1-4,修改另外2台假造机的mac地点,勾选假造化选项
修改假造机主机名、ip地点和uuid 

1、点击开启此假造机,启动假造机,使用终端登录假造机

2、修改假造机主机名称
  1. # 修改主机名
  2. hostnamectl set-hostname k8s-master
  3. # 查看主机名
  4. hostname
复制代码

3、修改假造机ip地点和uuid
3.1、生成UUID
  1. uuidgen
复制代码

3.2、修改网卡信息
  1. vim /etc/NetworkManager/system-connections/ens160.nmconnection
复制代码
 修改以下信息并生存,新的ip地点要在vmware分配的ip范围内

4、重新启动网卡
  1. nmcli connection reload ens160
复制代码
 5、重复步骤1-4修改另外2台假造机的信息
关机做快照 (可选)

1、以上操作做好之后,防止背面做集群的时候出问题,我这里先关机做个快照(关机做快照速度快),这一步并非是必须要做的,看个情面况。


2、做好快照后,记得重新启动全部假造机 
集群前置工作(三台呆板都执行)

修改hosts

1、修改hosts,域名映射 下令如下
  1. echo "192.168.65.130 k8s-master.com k8s-master" >> /etc/hosts
  2. echo "192.168.65.131 k8s-node1.com k8s-node1" >> /etc/hosts
  3. echo "192.168.65.132 k8s-node2.com k8s-node2" >> /etc/hosts
  4. echo "192.168.65.135 k8s-harbor.com k8s-harbor" >> /etc/hosts
复制代码
2、另外2台也同样操作,终极3台假造机的hosts如下,我这里把镜像堆栈的那台呆板也做了域名映射,方便背面使用
k8s-master

k8s-node1

 k8s-node2

关闭防火墙

关闭防火墙,并禁止开机自启。修改防火墙的状态后需要把docker重启下
  1. # 关闭防火墙
  2. systemctl stop firewalld.service
  3. # 禁止开机自启
  4. systemctl disable firewalld.service
  5. # 重启docker
  6. systemctl restart docker
复制代码

docker镜像加速

registry-mirrors:镜像加速地点,我这里使用的是阿里云的镜像加速器
insecure-registries:私有堆栈地点,我这里使用的是自己的harbor堆栈,假如你没有使用个人堆栈也可以不用加
  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4.   "registry-mirrors": ["https://******.mirror.aliyuncs.com"],
  5.   "insecure-registries": ["192.168.65.135","k8s-harbor.com"]
  6. }
  7. EOF
  8. sudo systemctl daemon-reload
  9. sudo systemctl restart docker
复制代码
docker开机自启

  1. systemctl enable docker
复制代码
安装容器运行时

转发 IPv4 并让 iptables 看到桥接流量

vm.swappiness参数记得加上,禁止交换分区 
  1. cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
  2. overlay
  3. br_netfilter
  4. EOF
  5. sudo modprobe overlay
  6. sudo modprobe br_netfilter
  7. # 设置所需的 sysctl 参数,参数在重新启动后保持不变
  8. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  9. net.bridge.bridge-nf-call-iptables  = 1
  10. net.bridge.bridge-nf-call-ip6tables = 1
  11. net.ipv4.ip_forward                 = 1
  12. vm.swappiness                                                = 0
  13. EOF
  14. # 应用 sysctl 参数而不重新启动
  15. sudo sysctl --system
复制代码
关闭交换分区

  1. # 临时关闭
  2. swapoff -a
  3. # 永久关闭  
  4. sed -ri 's/.*swap.*/#&/' /etc/fstab
复制代码

确认 br_netfilter 和 overlay 模块被加载

  1. lsmod | grep br_netfilter
  2. lsmod | grep overlay
复制代码

体系变量是否被设置为 1

  1. sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
复制代码

安装设置containerd

安装containerd(略过)

   这一步在安装docker的时候已经安装过了,不在重复安装,安装docker的时候会安装containerd.io,详细下令如下图
  

下面是官方文档的参考地点
  1. https://github.com/containerd/containerd/blob/main/docs/getting-started.md
复制代码
 设置containerd

1、查看默认内容
  1. cat /etc/containerd/config.toml
复制代码
2、生成默认设置内容
  1. containerd config default > /etc/containerd/config.toml
复制代码
3、修改生成的文件内容
  1. vim /etc/containerd/config.toml
复制代码
 重要修改三个地点
   1、SystemdCgroup的值改为true
SystemdCgroup = true
  2、替换sandbox的镜像地点和版本
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
  3、添加镜像加速
[plugins]
    [plugins."io.containerd.grpc.v1.cri".registry]
      ...
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
      # 以下内容为新添加
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
        endpoint = ["https://te2osmuz.mirror.aliyuncs.com"]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
        endpoint = ["registry.aliyuncs.com/google_containers"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s-harbor.com"]
         endpoint = ["http://k8s-harbor.com:80"]
  3.1、修改SystemdCgroup的值

3.2、修改sandbox的镜像地点和版本
  1. sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
复制代码

3.3、添加私有镜像
  1. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  2.   endpoint = ["https://te2osmuz.mirror.aliyuncs.com"]
  3. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
  4.   endpoint = ["registry.aliyuncs.com/google_containers"]
  5. ​​​​​​​[plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s-harbor.com"]
  6.   endpoint = ["http://k8s-harbor.com:80"]
复制代码

重启containerd

  1. systemctl daemon-reload
  2. systemctl restart containerd
  3. systemctl status containerd
复制代码

禁用SELinux

将 SELinux 设置为 permissive 模式(相当于将其禁用)
  1. sudo setenforce 0
  2. sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
复制代码

安装工具

添加 Kubernetes 的 yum 堆栈

关于怎样设置阿里云镜像源可以参考:Kubernetes镜像
  1. cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/
  5. enabled=1
  6. gpgcheck=1
  7. gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/repodata/repomd.xml.key
  8. EOF
复制代码

安装

  1. yum install -y kubelet kubeadm kubectl
复制代码



启动kubelet 

  1. systemctl enable kubelet && systemctl start kubelet
复制代码
 查看状态

kubelet会不停重启,这是正常现象,等集群初始化好之后就可以正常启动了
  1. systemctl status kubelet
复制代码

主节点初始化 (以下操作只在主节点执行)

生成默认设置文件

  1. kubeadm config print init-defaults > kubeadm.conf
复制代码
v1.29.5版本输出内容如下:
  1. apiVersion: kubeadm.k8s.io/v1beta3
  2. bootstrapTokens:
  3. - groups:
  4.   - system:bootstrappers:kubeadm:default-node-token
  5.   token: abcdef.0123456789abcdef
  6.   ttl: 24h0m0s
  7.   usages:
  8.   - signing
  9.   - authentication
  10. kind: InitConfiguration
  11. localAPIEndpoint:
  12.   advertiseAddress: 1.2.3.4
  13.   bindPort: 6443
  14. nodeRegistration:
  15.   criSocket: unix:///var/run/containerd/containerd.sock
  16.   imagePullPolicy: IfNotPresent
  17.   name: node
  18.   taints: null
  19. ---
  20. apiServer:
  21.   timeoutForControlPlane: 4m0s
  22. apiVersion: kubeadm.k8s.io/v1beta3
  23. certificatesDir: /etc/kubernetes/pki
  24. clusterName: kubernetes
  25. controllerManager: {}
  26. dns: {}
  27. etcd:
  28.   local:
  29.     dataDir: /var/lib/etcd
  30. imageRepository: registry.k8s.io
  31. kind: ClusterConfiguration
  32. kubernetesVersion: 1.29.0
  33. networking:
  34.   dnsDomain: cluster.local
  35.   serviceSubnet: 10.96.0.0/12
  36. scheduler: {}
复制代码
修改设置文件内容

重要修改以下几个地方
1、advertiseAddress:改为当前主机的ip地点
2、nodeRegistration.name:改为当前主机的hostname
3、imageRepository:我这里改成自己的私人堆栈地点了,假如自己有的话可以改成自己的,没有的话可以改成阿里云的镜像源地点:registry.aliyuncs.com/google_containers
4、新添加KubeletConfiguration,指定驱动范例。内容如下:
   ---
  kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
  5、serviceSubnet:这个看环境,假如自己想改的话也可以改,我这里用的默认的
6、podSubnet:指定容器的ip段 
7、kubernetesVersion:改为当前对应的版本

上传镜像到私有堆栈

假如不使用私有镜像堆栈的可以直接跳过这一步。直接开始下面的初始化
脚本内容如下push_images.sh
  1. #!/bin/bash
  2. # 登录私有仓库
  3. res=`docker login -u $1-p $2 k8s-harbor.com`
  4. images=$(kubeadm config images list --kubernetes-version v1.29.5 | awk -F '/' '{print $NF}')
  5. for item in ${images}
  6. do
  7.   docker pull registry.aliyuncs.com/google_containers/${item}
  8.   # 镜像重新打标签
  9.   docker tag registry.aliyuncs.com/google_containers/${item} k8s-harbor.com/google_containers/${item}
  10.   # 上传到私有仓库
  11.   docker push k8s-harbor.com/google_containers/${item}
  12. done
复制代码
赋予可执行权限
  1. chmod +x push_images.sh
  2. # 执行脚本,记得传入参数
  3. ./push_images <username> <password>
复制代码


脚本执行结束后就可以在私有堆栈中看到刚才上传的镜像了

开始初始化

kubeadm.conf:自定义的设置文件的名称
  1. kubeadm init --config kubeadm.conf
复制代码


将下面这段话复制下来,背面会用到
  1. Your Kubernetes control-plane has initialized successfully!
  2. To start using your cluster, you need to run the following as a regular user:
  3.   mkdir -p $HOME/.kube
  4.   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  5.   sudo chown $(id -u):$(id -g) $HOME/.kube/config
  6. Alternatively, if you are the root user, you can run:
  7.   export KUBECONFIG=/etc/kubernetes/admin.conf
  8. You should now deploy a pod network to the cluster.
  9. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  10.   https://kubernetes.io/docs/concepts/cluster-administration/addons/
  11. Then you can join any number of worker nodes by running the following on each as root:
  12. kubeadm join 192.168.65.130:6443 --token abcdef.0123456789abcdef \
  13.         --discovery-token-ca-cert-hash sha256:8eaeb4ce72361621049e32c458d0a931e6e0f6d543529287c63d1c7dc4b35c34
复制代码
创建设置文件

按照初始化成功的提示开始创建设置文件
  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码

安装网络插件

这里安装的网络插件是Calico,官方文档
下载并执行设置文件

文件下载后要使用kubectl create 下令去执行,不要使用kubectl apply ,官方文档对这个有特殊说明
  1. wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/tigera-operator.yaml
复制代码
  1. kubectl create -f tigera-operator.yaml
复制代码

  1. wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/custom-resources.yaml
复制代码
修改custom-resources.yaml

  1. vim custom-resources.yaml
复制代码
修改cidr的值
  1. calicoNetwork:
  2.     ipPools:
  3.     - name: default-ipv4-ippool
  4.       blockSize: 26
  5.       cidr: 192.168.110.0/24 # 修改为kubeadm.conf中podSubnet的值
复制代码

执行 custom-resources.yaml

  1. kubectl create -f custom-resources.yaml
复制代码

节点加入

节点node1加入

 在node1上执行以下下令
  1. kubeadm join 192.168.65.130:6443 --token abcdef.0123456789abcdef \
  2.         --discovery-token-ca-cert-hash sha256:8eaeb4ce72361621049e32c458d0a931e6e0f6d543529287c63d1c7dc4b35c34
复制代码

节点node2加入 

  1. kubeadm join 192.168.65.130:6443 --token abcdef.0123456789abcdef \
  2.         --discovery-token-ca-cert-hash sha256:8eaeb4ce72361621049e32c458d0a931e6e0f6d543529287c63d1c7dc4b35c34
复制代码

在master查看节点信息

 假如节点显示NotReady,则等待几分钟,等全部pod创建完成即可

全部节点加入成功

安装kubepi

我这里并没有安装官方的可视化控制面板,而是使用了另外一个可视化管理工具kubepi
下载镜像

  1. docker pull 1panel/kubepi
复制代码
 创建挂载目录

  1. mkdir -p /root/server/kubepi
复制代码
启动镜像

  1. docker run --privileged -p 8010:80 \
  2. --name kubepi \
  3. -v /root/server/kubepi:/var/lib/kubepi \
  4. --restart=unless-stopped \
  5. -d 1panel/kubepi
复制代码

访问kubepi

访问地点:ip:port 例如我的:192.168.65.130:8010
默认的账户名和密码:admin/kubepi

 导入k8s集群

点击导入按钮,设置k8s。k8s的设置信息在$HOME/.kube/config中


查看集群信息 


集群搭建过程常见问题

1、安装网络插件calico域名raw.githubusercontent.com无法访问

可以使用第三方网站查看dns对应的ip地点,然后修改自己的hosts文件,这里只是举个例子
  1. # 修改hosts
  2. vim /etc/hosts
  3. # 追加以下内容
  4. 185.199.111.133 raw.githubusercontent.com
  5. # 重新下载文件
复制代码
2、no matches for kind "Installation" in version "operator.tigera.io/v1"

   1、这个是在安装Calico网络插件的时候遇到的,重要原因是由于我安装的时候使用的是kubectl apply下令,将其更换为kubectl create即可 ,详细原因可以参考官网说明
  2、假如不是由于执行下令的问题,就是Calico版本不匹配,更换为合适的版本即可
  3、呆板重启后kubelet起不起来

   1、看下是不是之前关闭交换分区的时候只是临时关闭了(swapoff -a)详细原因可以参考报错日志,我的没启起来是由于交换分区重启后又打开了,永久关闭即可,永久关闭的下令文章中已提过。
  2、确保kubelet、docker、容器运行时(containerd)已启动
  补充说明

   文章中有两个地方设置了镜像堆栈的地点
  1、docker的设置文件/etc/docker/daemon.json文件,这个是使用docker拉取镜像是使用的加速器和堆栈地点
  2、容器运行时containerd的设置/etc/containerd/config.toml文件,由于这里使用的容器运行时是containerd,以是k8s拉取镜像的时候不会使用docker下令,而是使用crictl下令,以是k8s拉取镜像的时候会使用config.toml文件中关于镜像相关的设置
  结束语

以上便是k8s集群的整个部署过程,部署过程中需要下载镜像信息,可以使用给的脚本将其提前下载下来 ,对于k8s的网络插件官方文档提供了多种,可以根据环境自行安装其中一个即可。最重要的一点要保证kubelet、docker、容器运行时(containerd)设置为开机自启。可以使用下令查看是否开启开机自启:systemctl is-enabled <服务名称>


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表