目录
更多精彩博文详见:
《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 
- 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 
- 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 
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 
- K8s-node01节点
root@K8s-node01 \~\]# systemctl stop firewalld \&\& systemctl disable firewalld \[root@K8s-node01 \~\]# systemctl stop iptables \&\& systemctl disable iptables 
- K8s-node02节点
root@K8s-node02 \~\]# systemctl stop firewalld \&\& systemctl disable firewalld \[root@K8s-node02 \~\]# systemctl stop iptables \&\& systemctl disable iptables 
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 
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 
- 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 
6、关闭swap分区
(1)、K8s-controller节点
- 使用命令关闭swap分区
root@K8s-controller \~\]# swapoff -a
- 注释/etc/fstab文件中的swap分区挂载配置
防止开机自动挂载swap分区
root@K8s-controller \~\]# vim /etc/fstab 
(2)、K8s-node01节点
- 使用命令关闭swap分区
root@K8s-node01 \~\]# swapoff -a
- 注释/etc/fstab文件中的swap分区挂载配置
防止开机自动挂载swap分区
root@K8s-node01 \~\]# vim /etc/fstab 
(3)、K8s-node02节点
- 使用命令关闭swap分区
root@K8s-node02 \~\]# swapoff -a
- 注释/etc/fstab文件中的swap分区挂载配置
防止开机自动挂载swap分区
root@K8s-node02 \~\]# vim /etc/fstab 
7、安装时间同步服务
安装时间同步服务,确保各个集群节点时间同步一致。
(1)、K8s-controller节点
- 安装时间同步服务
root@K8s-controller \~\]# yum -y install chrony 
- 开启时间同步服务
root@K8s-controller \~\]# systemctl start chronyd \&\& systemctl enable chronyd \[root@K8s-controller \~\]# systemctl status chronyd 
(2)、K8s-node01节点
- 安装时间同步服务
root@K8s-node01 \~\]# yum -y install chrony 
- 开启时间同步服务
root@K8s-node01 \~\]# systemctl start chronyd \&\& systemctl enable chronyd \[root@K8s-node01 \~\]# systemctl status chronyd 
(3)、K8s-node02节点
- 安装时间同步服务
root@K8s-node02 \~\]# yum -y install chrony 
- 开启时间同步服务
root@K8s-node02 \~\]# systemctl start chronyd \&\& systemctl enable chronyd \[root@K8s-node02 \~\]# systemctl status chronyd 
8、加载br_netfilter模块
- K8s-controller节点
加载br_netfilter模块
root@K8s-controller \~\]# modprobe br_netfilter **查看br_netfilter模块加载情况** \[root@K8s-controller \~\]# lsmod \| grep br_netfilter 
- K8s-node01
加载br_netfilter模块
root@K8s-node01 \~\]# modprobe br_netfilter **查看br_netfilter模块加载情况** \[root@K8s-node01 \~\]# lsmod \| grep br_netfilter 
- K8s-node02
加载br_netfilter模块
root@K8s-node02 \~\]# modprobe br_netfilter **查看br_netfilter模块加载情况** \[root@K8s-node02 \~\]# lsmod \| grep br_netfilter 
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   * **使配置文件/etc/sysctl.d/kubernetes.conf生效** \[root@K8s-controller \~\]# sysctl -p /etc/sysctl.d/kubernetes.conf 
(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   * **使配置文件/etc/sysctl.d/kubernetes.conf生效** \[root@K8s-node01 \~\]# sysctl -p /etc/sysctl.d/kubernetes.conf 
(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   * **使配置文件/etc/sysctl.d/kubernetes.conf生效** \[root@K8s-node02 \~\]# sysctl -p /etc/sysctl.d/kubernetes.conf 
二、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 
(2)、解压Docker安装文件
- 解压安装文件
root@K8s-node01 docker\]# tar --no-same-owner -zxvf /K8s/docker/docker-19.03.15.tgz  * **创建docker相关可执行文件软链接** \[root@K8s-node01 docker\]# ln -s /K8s/docker/docker/\* /usr/bin/ \[root@K8s-node01 docker\]# ll /usr/bin/docker\* 
(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  
(5)、启动docker服务
- 启动服务
root@K8s-node01 \~\]# systemctl daemon-reload \&\& systemctl enable docker \&\& systemctl start docker  * **查看docker服务状态** \[root@K8s-node01 \~\]# systemctl status docker.service  * **查看docker服务进程信息** \[root@K8s-node01 \~\]# ps -ef \| grep -v "grep" \| grep docker --color  * **查看docker0网桥** \[root@K8s-node01 \~\]# ip addr show docker0  * **查看docker信息** \[root@K8s-node01 \~\]# docker info  从上图可以看到,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 
(2)、解压Docker安装文件
- 解压安装文件
root@K8s-node02 docker\]# tar --no-same-owner -zxvf /K8s/docker/docker-19.03.15.tgz  * **创建docker相关可执行文件软链接** \[root@K8s-node02 docker\]# ln -s /K8s/docker/docker/\* /usr/bin/ \[root@K8s-node02 docker\]# ll /usr/bin/docker\* 
(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  
(5)、启动docker服务
- 启动服务
root@K8s-node02 \~\]# systemctl daemon-reload \&\& systemctl enable docker \&\& systemctl start docker  * **查看docker服务状态** \[root@K8s-node02 \~\]# systemctl status docker.service  * **查看docker服务进程信息** \[root@K8s-node02 \~\]# ps -ef \| grep -v "grep" \| grep docker --color  * **查看docker0网桥** \[root@K8s-node02 \~\]# ip addr show docker0  * **查看docker信息** \[root@K8s-node02 \~\]# docker info  从上图可以看到,Registry Mirrors选项的值与/etc/docker/daemon.json中配置的一致。