CentOS二进制安装包方式部署K8S集群之系统初始化

目录

一、服务器基础配置

1、修改集群节点主机名称

2、修改集群节点主机/etc/hosts文件

3、集群节点创建基础目录

4、关闭防火墙

5、关闭selinux

6、关闭swap分区

(1)、K8s-controller节点

(2)、K8s-node01节点

(3)、K8s-node02节点

7、安装时间同步服务

(1)、K8s-controller节点

(2)、K8s-node01节点

(3)、K8s-node02节点

8、加载br_netfilter模块

9、优化内核参数

(1)、K8s-controller节点

(2)、K8s-node01节点

(3)、K8s-node02节点

二、Docker组件部署

1、K8s-node01节点

(1)、下载Docker安装文件

(2)、解压Docker安装文件

(3)、创建docker.service文件

(4)、创建docker配置文件

(5)、启动docker服务

2、K8s-node02节点

(1)、下载Docker安装文件

(2)、解压Docker安装文件

(3)、创建docker.service文件

(4)、创建docker配置文件

(5)、启动docker服务


更多精彩博文详见:

《Linux系统应用运维》专栏总目录(持续更新)

《CentOS二进制安装包方式部署K8S集群之系统初始化》

《CentOS7二进制安装包方式部署K8S集群之CA根证书生成》

《CentOS7二进制安装包方式部署K8S集群之ETCD集群部署》

本文主要介绍了在CentOS 7系统下,使用二进制安装包方式部署K8S集群中主机系统初始化的相关内容。K8S集群节点规划如下:

|----------------|-----------------|-------------------------------------------------------|
| 主机名称 | IP | 部署组件 |
| K8s-controller | 192.168.110.150 | kube-apiserver、kube-controller-manager、kube-scheduler |
| K8s-node01 | 192.168.110.151 | kubelet、kube-proxy、容器运行时 |
| K8s-node02 | 192.168.110.152 | kubelet、kube-proxy、容器运行时 |

一、服务器基础配置

1、修改集群节点主机名称

  • 节点192.168.110.150:echo "K8s-controller" > /etc/hostname
  • 节点192.168.110.151:echo "K8s-node01" > /etc/hostname
  • 节点192.168.110.152:echo "K8s-node02" > /etc/hostname

2、修改集群节点主机/etc/hosts文件

  • K8s-controller节点

root@K8s-controller \~\]# cat \>\> /etc/hosts \<\< EOF 192.168.110.150 K8s-controller 192.168.110.151 K8s-node01 192.168.110.152 K8s-node02 EOF ![](https://i-blog.csdnimg.cn/direct/f7d057e26a1f4c22bb26ba49c80cd81d.png)

  • K8s-node01节点

root@K8s-node01 \~\]# cat \>\> /etc/hosts \<\< EOF 192.168.110.150 K8s-controller 192.168.110.151 K8s-node01 192.168.110.152 K8s-node02 EOF ![](https://i-blog.csdnimg.cn/direct/e534486e2a574f45bb5e3efb2d3a6dc9.png)

  • K8s-node02节点

root@K8s-node02 \~\]# cat \>\> /etc/hosts \<\< EOF 192.168.110.150 K8s-controller 192.168.110.151 K8s-node01 192.168.110.152 K8s-node02 EOF ![](https://i-blog.csdnimg.cn/direct/0f188ef70add4a39afa7a2871db23978.png)

3、集群节点创建基础目录

  • K8s-controller节点

root@K8s-controller \~\]# mkdir /K8s

  • K8s-node01节点

root@K8s-node01 \~\]# mkdir /K8s

  • K8s-node02节点

root@K8s-node02 \~\]# mkdir /K8s

4、关闭防火墙

此处为方便演示关闭防火墙,生产环境可根据实际情况开通服务器防火墙策略。

  • K8s-controller节点

root@K8s-controller \~\]# systemctl stop firewalld \&\& systemctl disable firewalld \[root@K8s-controller \~\]# systemctl stop iptables \&\& systemctl disable iptables ![](https://i-blog.csdnimg.cn/direct/c95c99346ae042aa9312604a52b1bced.png)

  • K8s-node01节点

root@K8s-node01 \~\]# systemctl stop firewalld \&\& systemctl disable firewalld \[root@K8s-node01 \~\]# systemctl stop iptables \&\& systemctl disable iptables ![](https://i-blog.csdnimg.cn/direct/ca14722de26d4b0fae7326b928453484.png)

  • K8s-node02节点

root@K8s-node02 \~\]# systemctl stop firewalld \&\& systemctl disable firewalld \[root@K8s-node02 \~\]# systemctl stop iptables \&\& systemctl disable iptables ![](https://i-blog.csdnimg.cn/direct/9bdf9d8e8f7f4d86a030532e8a1a3b4d.png)

5、关闭selinux

  • K8s-controller节点

root@K8s-controller \~\]# cat /etc/selinux/config \| grep "SELINUX=" --color \[root@K8s-controller \~\]# sed -i 's/enforcing/disabled/' /etc/selinux/config \[root@K8s-controller \~\]# getenforce \[root@K8s-controller \~\]# setenforce 0 ![](https://i-blog.csdnimg.cn/direct/3cab50524ac64c7fa6f1f3a35d7c3d60.png)

root@K8s-node01 \~\]# cat /etc/selinux/config \| grep "SELINUX=" --color \[root@K8s-node01 \~\]# sed -i 's/enforcing/disabled/' /etc/selinux/config \[root@K8s-node01 \~\]# getenforce \[root@K8s-node01 \~\]# setenforce 0 ![](https://i-blog.csdnimg.cn/direct/82f6a67647eb46df8aca230c4986711c.png)

  • K8s-node02节点

root@K8s-node02 \~\]# cat /etc/selinux/config \| grep "SELINUX=" --color \[root@K8s-node02 \~\]# sed -i 's/enforcing/disabled/' /etc/selinux/config \[root@K8s-node02 \~\]# getenforce \[root@K8s-node02 \~\]# setenforce 0 ![](https://i-blog.csdnimg.cn/direct/7f8b6b817c8d4e53a99a3338e790a16c.png)

6、关闭swap分区

(1)、K8s-controller节点
  • 使用命令关闭swap分区

root@K8s-controller \~\]# swapoff -a

  • 注释/etc/fstab文件中的swap分区挂载配置

防止开机自动挂载swap分区

root@K8s-controller \~\]# vim /etc/fstab ![](https://i-blog.csdnimg.cn/direct/e131c3c99f8c4ee08c72e90a88d07932.png)

(2)、K8s-node01节点
  • 使用命令关闭swap分区

root@K8s-node01 \~\]# swapoff -a

  • 注释/etc/fstab文件中的swap分区挂载配置

防止开机自动挂载swap分区

root@K8s-node01 \~\]# vim /etc/fstab ![](https://i-blog.csdnimg.cn/direct/2fcdd52152e44904b6e8e2dc937f6f5a.png)

(3)、K8s-node02节点
  • 使用命令关闭swap分区

root@K8s-node02 \~\]# swapoff -a

  • 注释/etc/fstab文件中的swap分区挂载配置

防止开机自动挂载swap分区

root@K8s-node02 \~\]# vim /etc/fstab ![](https://i-blog.csdnimg.cn/direct/b650708cd40b4e46afc028c3338c9933.png)

7、安装时间同步服务

安装时间同步服务,确保各个集群节点时间同步一致。

(1)、K8s-controller节点
  • 安装时间同步服务

root@K8s-controller \~\]# yum -y install chrony ![](https://i-blog.csdnimg.cn/direct/81bde7c41c4f4732b23990f446e4d361.png)

  • 开启时间同步服务

root@K8s-controller \~\]# systemctl start chronyd \&\& systemctl enable chronyd \[root@K8s-controller \~\]# systemctl status chronyd ![](https://i-blog.csdnimg.cn/direct/42ad970d7b8d4985ab316de90cc4b5ad.png)

(2)、K8s-node01节点
  • 安装时间同步服务

root@K8s-node01 \~\]# yum -y install chrony ![](https://i-blog.csdnimg.cn/direct/c58648a6f90f4a8baeba275871030c84.png)

  • 开启时间同步服务

root@K8s-node01 \~\]# systemctl start chronyd \&\& systemctl enable chronyd \[root@K8s-node01 \~\]# systemctl status chronyd ![](https://i-blog.csdnimg.cn/direct/a89503be727b408790e37c24f41522d1.png)

(3)、K8s-node02节点
  • 安装时间同步服务

root@K8s-node02 \~\]# yum -y install chrony ![](https://i-blog.csdnimg.cn/direct/3c5b86eb4815421f9a54c944805b1262.png)

  • 开启时间同步服务

root@K8s-node02 \~\]# systemctl start chronyd \&\& systemctl enable chronyd \[root@K8s-node02 \~\]# systemctl status chronyd ![](https://i-blog.csdnimg.cn/direct/0921e756a96845b1bb9cc3d390bf86c1.png)

8、加载br_netfilter模块

  • K8s-controller节点

加载br_netfilter模块

root@K8s-controller \~\]# modprobe br_netfilter **查看br_netfilter模块加载情况** \[root@K8s-controller \~\]# lsmod \| grep br_netfilter ![](https://i-blog.csdnimg.cn/direct/21b81572f7204cfba7ef5edf239c389c.png)

  • K8s-node01

加载br_netfilter模块

root@K8s-node01 \~\]# modprobe br_netfilter **查看br_netfilter模块加载情况** \[root@K8s-node01 \~\]# lsmod \| grep br_netfilter ![](https://i-blog.csdnimg.cn/direct/9b98dc2ab0394a44a25997a663e16a08.png)

  • K8s-node02

加载br_netfilter模块

root@K8s-node02 \~\]# modprobe br_netfilter **查看br_netfilter模块加载情况** \[root@K8s-node02 \~\]# lsmod \| grep br_netfilter ![](https://i-blog.csdnimg.cn/direct/0fe2e17ee0df44f5979d42d66016f759.png)

9、优化内核参数

sysctl命令在Linux中用于系统运行时检查、修改内核参数,该命令允许用户读取和修改内核参数,以便优化系统性能。

(1)、K8s-controller节点
  • 新增配置文件/etc/sysctl.d/kubernetes.conf

root@K8s-controller \~\]# cat \> /etc/sysctl.d/kubernetes.conf \<\< EOF net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 #tcp_tw_recycle与kubernetes的NAT会引起冲突导致服务不通,此处关闭。 net.ipv4.tcp_tw_recycle=0 #不检查物理内存是否够用 vm.overcommit_memory=1 #关闭不使用的ipv6协议栈,防止触发docker相关的BUG. net.ipv6.conf.all.disable_ipv6=1 EOF ![](https://i-blog.csdnimg.cn/direct/27d39c0e99de46d7a5547c700ed2b768.png) ![](https://i-blog.csdnimg.cn/direct/b5f66ea475234a12bc40cc9f130d0e0b.png) * **使配置文件/etc/sysctl.d/kubernetes.conf生效** \[root@K8s-controller \~\]# sysctl -p /etc/sysctl.d/kubernetes.conf ![](https://i-blog.csdnimg.cn/direct/8569a4a996fa4c2d9aa218165c059d85.png)

(2)、K8s-node01节点
  • 新增配置文件/etc/sysctl.d/kubernetes.conf

root@K8s-node01 \~\]# cat \> /etc/sysctl.d/kubernetes.conf \<\< EOF net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 #tcp_tw_recycle与kubernetes的NAT会引起冲突导致服务不通,此处关闭。 net.ipv4.tcp_tw_recycle=0 #不检查物理内存是否够用 vm.overcommit_memory=1 #关闭不使用的ipv6协议栈,防止触发docker相关的BUG. net.ipv6.conf.all.disable_ipv6=1 EOF ![](https://i-blog.csdnimg.cn/direct/0e6478a337f34fea928277efd2a10fb3.png) ![](https://i-blog.csdnimg.cn/direct/065bb2d0e3474d8092859ee1b65b327b.png) * **使配置文件/etc/sysctl.d/kubernetes.conf生效** \[root@K8s-node01 \~\]# sysctl -p /etc/sysctl.d/kubernetes.conf ![](https://i-blog.csdnimg.cn/direct/3ed3f262e62a420cbbc399877faf3977.png)

(3)、K8s-node02节点
  • 新增配置文件/etc/sysctl.d/kubernetes.conf

root@K8s-node02 \~\]# cat \> /etc/sysctl.d/kubernetes.conf \<\< EOF net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 #tcp_tw_recycle与kubernetes的NAT会引起冲突导致服务不通,此处关闭。 net.ipv4.tcp_tw_recycle=0 #不检查物理内存是否够用 vm.overcommit_memory=1 #关闭不使用的ipv6协议栈,防止触发docker相关的BUG. net.ipv6.conf.all.disable_ipv6=1 EOF ![](https://i-blog.csdnimg.cn/direct/8574ff918d714320910a2d724a14042c.png) ![](https://i-blog.csdnimg.cn/direct/11ad8dac144548b5bd682303f4f9794f.png) * **使配置文件/etc/sysctl.d/kubernetes.conf生效** \[root@K8s-node02 \~\]# sysctl -p /etc/sysctl.d/kubernetes.conf ![](https://i-blog.csdnimg.cn/direct/e9258c1e8505458c89b3cd24fea1f925.png)


二、Docker组件部署

Docker组件需要部署在工作负载节点,故此处只在K8s-node01节点和K8s-node02节点上部署。

1、K8s-node01节点

(1)、下载Docker安装文件

此处部署的是19.03.15版本,可根据实际环境选择相应的版本。

  • 创建docker基目录

root@K8s-node01 \~\]# mkdir -p /K8s/docker * **下载docker安装文件** \[root@K8s-node01 \~\]# cd /K8s/docker \[root@K8s-node01 docker\]# wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.15.tgz ![](https://i-blog.csdnimg.cn/direct/cbc6e762d2634208a0c5ce7cd436aa83.png)

(2)、解压Docker安装文件
  • 解压安装文件

root@K8s-node01 docker\]# tar --no-same-owner -zxvf /K8s/docker/docker-19.03.15.tgz ![](https://i-blog.csdnimg.cn/direct/d0ef40c333864b3aa5ac19eeaa0d5f75.png) * **创建docker相关可执行文件软链接** \[root@K8s-node01 docker\]# ln -s /K8s/docker/docker/\* /usr/bin/ \[root@K8s-node01 docker\]# ll /usr/bin/docker\* ![](https://i-blog.csdnimg.cn/direct/a1c102c2355d4b9c8e9285d0574ff8dc.png)

(3)、创建docker.service文件

创建/usr/lib/systemd/system/docker.service文件,通过systemd来管理docker服务。

root@K8s-node01 \~\]# cat \> /usr/lib/systemd/system/docker.service \<\< EOF \[Unit

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

Service

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP \$MAINPID

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

Install

WantedBy=multi-user.target

EOF

(4)、创建docker配置文件

创建daemon.json配置文件,该文件只能放在/etc/docker/路径下。Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgoupfs。

root@K8s-node01 \~\]# cat \> /etc/docker/daemon.json \<\< EOF { "registry-mirrors": \["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://0kqamue3.mirror.aliyuncs.com","https://b2dw755a.mirror.aliyuncs.com"\], "exec-opts": \["native.cgroupdriver=systemd"\], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "5" } } EOF ![](https://i-blog.csdnimg.cn/direct/7357318e69cb4d109212c6edcfc5dcfe.png) ![](https://i-blog.csdnimg.cn/direct/49150d6cee4f49a9aec8abe5759cb457.png)

(5)、启动docker服务
  • 启动服务

root@K8s-node01 \~\]# systemctl daemon-reload \&\& systemctl enable docker \&\& systemctl start docker ![](https://i-blog.csdnimg.cn/direct/68a38d96cf5a4c8ab3aa370bf5759a1b.png) * **查看docker服务状态** \[root@K8s-node01 \~\]# systemctl status docker.service ![](https://i-blog.csdnimg.cn/direct/a54d8591ec014f668b2eb9de4f9189f0.png) * **查看docker服务进程信息** \[root@K8s-node01 \~\]# ps -ef \| grep -v "grep" \| grep docker --color ![](https://i-blog.csdnimg.cn/direct/670d9bd18f224a0fbe53e88f0635a543.png) * **查看docker0网桥** \[root@K8s-node01 \~\]# ip addr show docker0 ![](https://i-blog.csdnimg.cn/direct/701a6d8a36fb40f79e7e9154639ce1a6.png) * **查看docker信息** \[root@K8s-node01 \~\]# docker info ![](https://i-blog.csdnimg.cn/direct/9dbd16a3e6c640c0af91ec1b54e7ce8f.png) 从上图可以看到,Registry Mirrors选项的值与/etc/docker/daemon.json中配置的一致。

2、K8s-node02节点

(1)、下载Docker安装文件

此处部署的是19.03.15版本,可根据实际环境选择相应的版本。

  • 创建docker基目录

root@K8s-node02 \~\]# mkdir -p /K8s/docker * **下载docker安装文件** \[root@K8s-node02 \~\]# cd /K8s/docker \[root@K8s-node02 docker\]# wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.15.tgz ![](https://i-blog.csdnimg.cn/direct/e5400019a8144faf9db3a6f4bc7e54e9.png)

(2)、解压Docker安装文件
  • 解压安装文件

root@K8s-node02 docker\]# tar --no-same-owner -zxvf /K8s/docker/docker-19.03.15.tgz ![](https://i-blog.csdnimg.cn/direct/692ce9e79eff4a3aa3e38e52e0f6238b.png) * **创建docker相关可执行文件软链接** \[root@K8s-node02 docker\]# ln -s /K8s/docker/docker/\* /usr/bin/ \[root@K8s-node02 docker\]# ll /usr/bin/docker\* ![](https://i-blog.csdnimg.cn/direct/36056a3a63c54a3f94777157ff95d1fd.png)

(3)、创建docker.service文件

创建/usr/lib/systemd/system/docker.service文件,通过systemd来管理docker服务。

root@K8s-node02 \~\]# cat \> /usr/lib/systemd/system/docker.service \<\< EOF \[Unit

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

Service

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP \$MAINPID

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

Install

WantedBy=multi-user.target

EOF

(4)、创建docker配置文件

创建daemon.json配置文件,该文件只能放在/etc/docker/路径下。Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgoupfs。

root@K8s-node02 \~\]# cat \> /etc/docker/daemon.json \<\< EOF { "registry-mirrors": \["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://0kqamue3.mirror.aliyuncs.com","https://b2dw755a.mirror.aliyuncs.com"\], "exec-opts": \["native.cgroupdriver=systemd"\], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "5" } } EOF ![](https://i-blog.csdnimg.cn/direct/746bf5964c93429eb8fb7795655c9842.png) ![](https://i-blog.csdnimg.cn/direct/816d419845d54118857926f40918b18c.png)

(5)、启动docker服务
  • 启动服务

root@K8s-node02 \~\]# systemctl daemon-reload \&\& systemctl enable docker \&\& systemctl start docker ![](https://i-blog.csdnimg.cn/direct/1b3c64045cb7430e9057428a681a31d3.png) * **查看docker服务状态** \[root@K8s-node02 \~\]# systemctl status docker.service ![](https://i-blog.csdnimg.cn/direct/20e5def6341049c58c85de9e9ecb4891.png) * **查看docker服务进程信息** \[root@K8s-node02 \~\]# ps -ef \| grep -v "grep" \| grep docker --color ![](https://i-blog.csdnimg.cn/direct/44461507bbba4a2c91dfb1b9905cfe9d.png) * **查看docker0网桥** \[root@K8s-node02 \~\]# ip addr show docker0 ![](https://i-blog.csdnimg.cn/direct/7cb7f4b028b6450f8f96f9ea734c7f7c.png) * **查看docker信息** \[root@K8s-node02 \~\]# docker info ![](https://i-blog.csdnimg.cn/direct/5f17eed1cbc34b168432fcb3651afc24.png) 从上图可以看到,Registry Mirrors选项的值与/etc/docker/daemon.json中配置的一致。

相关推荐
小闫BI设源码2 小时前
Kubernetes 集群高可用
云原生·容器·kubernetes·滚动更新·operator模式·helm包管理·ci/cd集成
云道轩2 小时前
在rocky linux 9.5上安装yq
linux·kubernetes
晨港飞燕2 小时前
Websocket+Redis实现微服务消息实时同步
redis·websocket·微服务
烦躁的大鼻嘎2 小时前
【Linux】深入探索多线程编程:从互斥锁到高性能线程池实战
linux·运维·服务器·开发语言·c++·算法·ubuntu
霍格沃兹测试开发学社测试人社区3 小时前
Playwright MCP浏览器自动化详解指南
运维·自动化
xuhe23 小时前
告别 LaTeX 配置地狱:我的 Overleaf (ShareLaTeX-CE) 完整版私有化部署方案
linux·docker·overleaf
柳贯一(逆流河版)3 小时前
Gateway 集成 JWT 身份认证:微服务统一认证的实战指南
微服务·架构·gateway
天空之外1363 小时前
nginx xxs漏铜修复、nginx 域名配置、nginx https证书配置、Http不安全处理方法
运维·nginx
莫克_Cheney4 小时前
Ubuntu 24.04 安装搜狗输入法完整教程
linux·运维·ubuntu