当前位置: 首页 > news >正文

Part1:基于国内源完成Kubernetes集群部署

集群规划

操作系统:CentOS7 内核版本:5.4+(需升级)

组件版本说明
操作系统内核5.4+RPM方式升级
docker26.1.4yum安装
cri-docker0.3.16二进制安装
kubeadm1.30.11yum安装
kubealet1.30.11yum安装
kubectl1.30.11yum安装
kubectl1.30.11yum安装
kubernetes1.30.11kubeadm部署
flannel1.6.2CNI插件
kubernetes-dashboad7.6.5helm安装
metric-server0.7.2

网络规划

  • 虚拟机NAT地址
    子网IP子网掩码网关
    192.168.85.0255.255.255.0192.168.85.1
  • K8S集群网络
    Pod子网Service子网
    10.240.0.0/1610.140.0.0/16
  • K8S集群节点
    节点名称节点IP
    master101192.168.85.101
    node102192.168.85.102
    node103192.168.85.103

创建虚拟机

使用VMWare先创建一个虚拟机,虚拟机的网络配置使用网桥,需要提前配置好网络配置,如:网段、掩码、网关。这部分教程比较多,可自行搜索。唯一需要注意的一点就是NAT网络的设置,需要注意子网、掩码、网关的地址,在后续的操作系统中用于配置节点的网络。
在这里插入图片描述

系统配置

配置网络

操作系统安装好之后,第一步就是先配置好网络,网络连通之后才能继续后续的步骤。在这个集群里,我们通常会把IP设置为静态IP方便管理。

[root@master101 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO="static" # 必须为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33 # 网卡名称
UUID=07ba6f88-2fce-4fd9-9b95-4da163097f7a
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.85.101 # 静态IP 需要在虚拟机的NET地址网段内
GATEWAY=192.168.85.1 # 网关 需要与虚拟机的NET地址的网关一致
NETMASK=255.255.255.0 # 掩码 需要与虚拟机的NET地址的掩码一致
IPV6_PRIVACY=no #
DNS1=8.8.8.8 # DNS可以有多个,也可以使用其他稳定的DNS
PREFIX=24

重新启动下网络,并检查下IP是否是与配置文件一致

[root@master101 ~]# systemctl restart network
[root@master101 ~]# ifconfig

关闭防火墙

[root@master101 ~]# systemctl disable firewalld
[root@master101 ~]# systemctl stop firewalld
[root@master101 ~]# systemctl status firewalld
[root@master101 ~]# systemctl restart network

同步时钟

[root@master101 ~]# timedatectl set-timezone 'Asia/Shanghai'
[root@master101 ~]# ntpdate ntp1.aliyun.com
[root@master101 ~]# date
[root@master101 ~]# cat >> /etc/crontab << EOF
* * * * root /usr/sbin/ntpdate ntp1.aliyun.com && /sbin/hwclock -w
EOF

升级内核

Kubernetes 1.30 默认要求容器运行时(containerd/CRI-O)启用 ​cgroups v2,而完整支持该功能需要 Linux 5.4+ 内核。目前使用的docker,没有修改使用到cgroupV2。

  1. 查看系统的内核版本
    [root@master101 ~]# uname -r
    3.10.0-693.el7.x86_64
    
  2. 使用yum升级内核
    [root@master101 ~]# cat <<EOF > /etc/yum.repos.d/elrepo.repo
    [elrepo]
    name=elrepo
    baseurl=https://mirrors.aliyun.com/elrepo/archive/kernel/el7/x86_64
    gpgcheck=0
    enabled=1
    EOF
    [root@master101 ~]# yum clean all && yum makecache
    [root@master101 ~]# yum list --showduplicate kernel*
    已加载插件:fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    已安装的软件包
    kernel.x86_64                              3.10.0-693.el7                   @anaconda
    kernel-devel.x86_64                        3.10.0-693.el7                   @anaconda
    kernel-headers.x86_64                      3.10.0-693.el7                   @anaconda
    kernel-tools.x86_64                        3.10.0-693.el7                   @anaconda
    kernel-tools-libs.x86_64                   3.10.0-693.el7                   @anaconda
    
    没有找到预期的内核版本,所以换种另外的方式,使用RPM来安装。
  3. RPM升级内核
    下载内核包
    [root@master101 ~]# mkdir kernel-rpm
    [root@master101 ~]# cd kernel-rpm
    [root@master101 kernel-rpm]# wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.226-1.el7.elrepo.x86_64.rpm
    [root@master101 kernel-rpm]# wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-headers-5.4.226-1.el7.elrepo.x86_64.rpm
    [root@master101 kernel-rpm]# wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.226-1.el7.elrepo.x86_64.rpm
    
    安装
    [root@master101 kernel-rpm]#  rpm -ivh kernel-lt-5.4.226-1.el7.elrepo.x86_64.rpm
    [root@master101 kernel-rpm]# rpm -ivh kernel-lt-devel-5.4.226-1.el7.elrepo.x86_64.rpm
    
    查看内核启动版本
    [root@master101 kernel-rpm]# rpm -qa | grep kernel
    kernel-tools-libs-3.10.0-693.el7.x86_64
    kernel-headers-3.10.0-693.el7.x86_64
    kernel-lt-5.4.226-1.el7.elrepo.x86_64
    abrt-addon-kerneloops-2.1.11-48.el7.centos.x86_64
    kernel-lt-devel-5.4.226-1.el7.elrepo.x86_64
    kernel-3.10.0-693.el7.x86_64
    kernel-devel-3.10.0-693.el7.x86_64
    kernel-tools-3.10.0-693.el7.x86_64
    
    设置内核启动顺序,默认启动高版本的内核
    [root@master101 ~]# cat /etc/grub2.cfg | grep menuentry|awk -F "\'" '$1=="menuentry " {print i++ " : " $2}'
    [root@master101 ~]# grub2-set-default 0
    [root@master101 ~]# reboot
    [root@master101 ~]# uname -r
    5.4.226-1.el7.elrepo.x86_64
    
    CentOS7.9升级3.10内核至5.4

配置内核参数

禁止使用swap分区

[root@master101 ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
[root@master101 ~]# setenforce 0
[root@master101 ~]# swapoff -a

将桥接的lPv4流量传递到iptables的链

[root@master101 ~]# cat > /etc/sysctl.d/k8s.conf << EOF
vm.swappiness=0
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master101 ~]# sysctl -p /etc/sysctl.d/k8s.conf
vm.swappiness = 0
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
[root@master101 ~]# sysctl --system 

配置ipvs功能

[root@master101 ~]# yum install ipset ipvsadm -y
[root@master101 ~]# cat >> /etc/sysconfig/modules/ipvs.modules << EOF
> #!/bin/bash
> modprobe -- ip_vs
> modprobe -- ip_vs_rr
> modprobe -- ip_vs_wrr
> modprobe -- ip_vs_sh
> modprobe -- nf_conntrack
> EOF
[root@master101 ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
[root@master101 ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
[root@master101 ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack_ipv4      15053  2 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
nf_conntrack          139264  6 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack

安装Docker以及cri-dockerd

安装Docker

[root@master101 ~]# yum remove docker*
[root@master101 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@master101 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master101 ~]# yum install -y docker-ce
[root@master101 ~]# docker -v
Docker version 26.1.4, build 5650f9b

配置国内的镜像源,一般可以去阿里云注册一个账户,免费使用它的镜像加速。当然也可以使用其他常用的加速地址。不过更推荐阿里云的,因为比较稳定。

[root@localhost ~]# cat >> /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://29wbjzyc.mirror.aliyuncs.com","https://registry.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

[root@master101 ~]# systemctl daemon-reload
[root@master101 ~]# systemctl restart docker

先拉取下后续安装K8S所需的镜像,顺便验证下docker是否正常。

[root@master101 ~]# docker images
REPOSITORY                                                                                  TAG               IMAGE ID       CREATED         SIZE
ghcr.io/flannel-io/flannel-cni-plugin                                                       v1.6.2-flannel1   55ce2385d9d8   6 weeks ago     10.7MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard-api               1.8.1             9446b3f1c3ba   6 months ago    46.9MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kong                                     3.8.0             8ed1b48bc959   6 months ago    375MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard-web               1.4.0             65bdf9576e48   9 months ago    181MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard-auth              1.1.3             19b0f210f0dc   11 months ago   40.1MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard-metrics-scraper   1.1.1             e3e259695944   12 months ago   35.3MB

安装cri-dockerd

[root@master101 ~]# mkdir k8s && cd k8s
[root@master101 k8s]# wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16.amd64.tgz 
[root@master101 k8s]# ls
cri-dockerd-0.3.16.amd64.tgz
[root@master101 k8s]# tar xvf cri-dockerd-0.3.16.amd64.tgz
cri-dockerd/
cri-dockerd/cri-dockerd
[root@master101 k8s]# ls
cri-dockerd  cri-dockerd-0.3.16.amd64.tgz
[root@master101 k8s]# cp cri-dockerd/cri-dockerd /usr/bin/
[root@master101 k8s]# cri-dockerd --version
cri-dockerd 0.3.16 (7119864)

配置 cri-docker 服务


# 配置 cri-docker 服务
[root@master101 k8s]#  cat > /usr/lib/systemd/system/cri-docker.service <<EOF 
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

# 配置 cri-docker socket
[root@master101 k8s]# cat > /usr/lib/systemd/system/cri-docker.socket <<EOF 
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target

重新启动并且设置开机自启动

[root@master101 k8s]# systemctl daemon-reload
[root@master101 k8s]# systemctl enable cri-docker --now

安装 kubeadm、kubelet、kubectl

通过阿里云的镜像站来完成加速下载 kubeadm、kubelet、kubectl。需要注意的是由于 Kubernetes 官方变更了仓库的存储路径以及使用方式,如果需要使用 1.28 及以上版本,需要使用新版配置方法进行配置。详情参见阿里云开发者社区-镜像站-kubernetes。

[root@master101 ~]# cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key
EOF

[root@master101 ~]# yum --disablerepo="*" --enablerepo="kubernetes" list available
[root@master101 ~]# yum -y install kubeadm kubelet kubectl
 # 如果无法启动则需要排查下,可能因为开启了swap
[root@master101 ~]# systemctl status kubelet
[root@master101 ~]# systemctl start kubelet
[root@master101 ~]# systemctl enable kubelet

注意:如果kubelet启动失败,大概率是系统开启了swap分区,这时候是需要关闭的。

[root@master101 ~]# swapon --show
NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition   2G 524K   -2
[root@master101 ~]# cat /etc/fstab | grep swap
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@master101 ~]# vim /etc/fstab 
[root@master101 ~]# cat /etc/fstab | grep swap
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@master101 ~]# swapoff -a

克隆机器

目前为止,我们在master101上配置了k8s集群部署所需的关键配置,也完成了docker和k8s容器运行时的安装,拉取了后续集群部署所需的镜像。 拉取镜像其实可以放到后续的步骤去完成,只是我比较懒,我更希望通过克隆虚拟机的方式将所有资源都拷贝到集群的各个节点上。这样可以避免多次下载。后面直接将master101当成模板机克隆出两台机器node102以及node103,当然熟悉的朋友也可以自行再次新建虚拟机完成。这里的克隆我就不再演示了,比较简单,没什么门槛,只是克隆的时候需要注意是完整克隆。

网络配置

由于两台虚拟机都是通过master101克隆出来的,所以克隆出来的node102,、node103与master101的IP地址还有主机名都是一样的,因此我们需要修改IP地址和主机名。先单独开启node102,或者将master101和node103的网络断开,这样node102就可以正常使用网络通信了。

需要注意UUID是否与master101一致,如果一致则需要重新修改,UUID在我们的网络集群中必须保证唯一性。设置完IP之后,我们再修改下主机名方便我们更好的区分。

[root@master101 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens33 | grep -E 'IPADDR|UUID'
UUID=1ebe2b03-dd7d-4df7-87e9-1dbc00c33252
IPADDR=192.168.85.101
[root@master101 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@master101 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens33 | grep -E 'IPADDR|UUID'
UUID=1ebe2b03-dd7d-4df7-87e9-1dbc00c33252
IPADDR=192.168.85.102
[root@master101 ~]# hostnamectl set-hostname node102
[root@master101 ~]# systemctl restart network

如果我们使用shell远程连接的可能需要重新使用node102的IP完成登录。按照此步骤我们开启node103并完成相关的配置。

[root@master101 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens33 | grep -E 'IPADDR|UUID'
UUID=1ebe2b03-dd7d-4df7-87e9-1dbc00c33259
IPADDR=192.168.85.101
[root@master101 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@master101 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens33 | grep -E 'IPADDR|UUID'
UUID=1ebe2b03-dd7d-4df7-87e9-1dbc00c33259
IPADDR=192.168.85.103
[root@master101 ~]# hostnamectl set-hostname node103
[root@master101 ~]# systemctl restart network

在三台主机上都添加下集群节点的主机名信息,注意是三个节点都执行

[root@master101 ~]# cat >> /etc/hosts <<EOF
> 192.168.85.101 master101 master101
> 192.168.85.102 node102 node102
> 192.168.85.103 node103 node103
> EOF

免密登录

所有主机均修改ssh配置运行公钥验证免密登录,先打开公钥验证开关,注意三个主机都需要执行。

[root@master101 ~]# cat /etc/ssh/sshd_config | grep -e AuthorizedKeysFile -e PubkeyAuthentication 
#PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
[root@master101 ~]# vim /etc/ssh/sshd_config
[root@master101 ~]# cat /etc/ssh/sshd_config | grep -e AuthorizedKeysFile -e PubkeyAuthentication 
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

生成以RSA算法生成的秘钥对,执行命令时不输入任何信息直接回车,保持默认就行。三个节点均需要执行。

[root@master101 ~]# ssh-keygen -t rsa
[root@master101 .ssh]# pwd
/root/.ssh
[root@master101 .ssh]# ls
id_rsa  id_rsa.pub

在master101上将每个节点的公钥复制

[root@master101 .ssh]# cat id_rsa.pub >> authorized_keys
[root@master101 .ssh]# ssh master101			# 自己远程自己,测试下
[root@master101 ~]# ssh root@node102 cat ~/.ssh/id_rsa.pub>> authorized_keys
[root@master101 ~]# ssh root@node103 cat ~/.ssh/id_rsa.pub>> authorized_keys
[root@master101 ~]# scp authorized_keys root@node102:/root/.ssh/
[root@master101 ~]# scp authorized_keys root@node103:/root/.ssh/
[root@master101 ~]# scp known_hosts root@node102:/root/.ssh/
[root@master101 ~]# scp known_hosts root@node103:/root/.ssh/

Part1结束语

截止到目前为止,我们已经完成了k8s集群部署的所有准备工作,接下来就是使用kubeadm来完成集群的部署。具体步骤在Part2:基于国内源完成Kubernetes集群部署。

相关文章:

  • 【从零开始学习计算机科学】算法分析(四)图 与 最大流算法
  • Qt-D指针与Q指针的设计哲学
  • 【数学建模】层次分析法(AHP)详解及其应用
  • PyTorch 生态概览:为什么选择动态计算图框架?
  • ffmpeg基础整理
  • 学校IPTV数字电视直播:IPTV电视系统赋能校园电化教育系统升级
  • SVN学习笔记
  • 微软 AI 发布 LongRoPE2:近乎无损地将大型语言模型上下文窗口扩展至 128K 标记,保持 97% 短上下文准确性
  • 基于ssm+vue汽车租赁系统
  • iOS QLPreviewController预览PDF文件等(Swift)
  • 人工智能与机器学习——系统学习规划
  • MMO_随笔
  • 人工智能中的线性代数基础详解
  • 深度学习之目标检测/对象检测
  • Leetcode-1278.Palindrome Partitioning III [C++][Java]
  • Jdk7不同集合的扩容机制
  • 新手村:数据预处理-缺失值补充策略
  • 电商商品系统的演进分析
  • 第36周:文献阅读
  • 计算机四级 - 数据库原理 - 第4章 「关系数据库标准语言SQL」
  • 高端网站设计 新鸿儒/seo百度站长工具
  • 做兼职的设计网站有哪些/百度seo是什么意思呢
  • 上海网站公安备案/怎么做好网站方式推广
  • 网站404页面怎么做/今日军事新闻最新消息中国
  • 快速生成网站/常见的网络营销工具
  • 长沙小红书推广公司/苏州优化seo