k8s部署
k8s部署详解
·
k8s部署详解
1.配置ip地址
master1 ip地址:192.168.31.138
worker1 ip地址:192.168.31.139
worker2 ip地址:192.168.31.140
2.主机名称解析
#准备三台机器,每台机器分别命名为master,node1,node2
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
#进入 /etc/hosts,在每台主机上加入:
192.168.31.138 master
192.168.31.139 node1
192.168.31.140 node2
3.关闭防火墙
[root@localhost ~]# systemctl stop firewalld #临时关闭
[root@localhost ~]# systemctl disable firewalld #永久关闭
#确认是否运行
[root@localhost ~]# firewall-cmd --state
not running
4.SELINUX配置
#查看SELINUX状态
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
#配置SELINUX
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
5.主机时间同步
由于最小化安装系统,需要单独安装ntpdate
yum install ntpdate -y
#在每台主机上输入命令 crontab -e
0 */1 * * * ntpdate time1.aliyun.com #每小时通过一次 分时日周月
#其中一台如下:
[root@master1 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@master1 ~]# ntpdate time1.aliyun.com
27 May 15:56:35 ntpdate[1505]: adjust time server 203.107.6.88 offset -0.019750 sec
[root@master1 ~]# crontab -l
0 */1 * * * ntpdate time1.aliyun.com
#输入 date,每台主机时间一致
6.永久关闭swap分区
使用kubeadm部署必须关闭swap分区,修改配置文件后需要重启操作系统
[root@master1 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 24 20:51:58 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos_miwifi--r4--srv-root / xfs defaults 0 0
UUID=2c843bc2-bad2-4244-bfe2-f2dcf0f00419 /boot xfs defaults 0 0
/dev/mapper/centos_miwifi--r4--srv-swap swap swap defaults 0 0
#在每台主机上输入 vi /etc/fstab
#在最后一行添加注释
# /dev/mapper/centos_miwifi--r4--srv-swap swap swap defaults 0 0
[root@master1 ~]# free -m #此时swap是有分区的
total used free shared buff/cache available
Mem: 1819 169 1420 9 229 1503
Swap: 2047 0 2047
#重启reboot
[root@master1 ~]# free -m
total used free shared buff/cache available
Mem: 1819 164 1478 9 176 1505
Swap: 0 0 0
7.添加网桥过滤
添加网桥过滤及地址转发
[root@master1 ~]# vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
加载br_netfilter模块
[root@master1 ~]# modprobe br_netfilter
#查看是否加载
[root@master1 ~]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 151336 1 br_netfilter
#刷新配置文件
[root@master1 ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
8.开启ipvs
8.1安装ipset及ipvsadm
yum install ipset ipvsadm -y
8.2在所有节点执行如下脚本
添加需要加载的模块
[root@master1 ~]# 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_ipv4
EOF
验证
[root@master1 ~]# ls /etc/sysconfig/modules/
ipvs.modules
[root@master1 ~]# ll /etc/sysconfig/modules/ #默认权限是644
总用量 4
-rw-r--r-- 1 root root 124 5月 27 16:42 ipvs.modules
授权,运行,检查是否加载
[root@master1 ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules
[root@master1 ~]# sh /etc/sysconfig/modules/ipvs.modules
[root@master1 ~]# lsmod | grep ip_vs_rr
ip_vs_rr 12600 0
ip_vs 145458 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
9.在manager节点及worker节点安装指定版本的docker-ce
#如果以前安装过docker,先卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#安装所需软件包
yum install -y device-mapper-persistent-data lvm2
#配置docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache
#查询可安装版本
yum list docker-ce --showduplicates | sort -r
如若安装过程中遇到如下问题:
解决办法:
#这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了
yum install -y yum-utils
安装指定版本docker
yum install --setopt=obsoletes=0 docker-ce-20.10.9-3.el7 -y
#查看docker版本
docker version
#启动docker
systemctl enable docker && systemctl start docker
[root@worker2 ~]# docker version
Client: Docker Engine - Community
Version: 20.10.16
10.修改docker-ce服务配置文件
修改其目的是为了后续使用/etc/docker/daemon.json来进行更多配置
vim /usr/lib/systemd/system/docker.service
我下载的是最新版本,所以要删除-H后面的内容,有些版本没有就不需要修改
vim /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"]
}
{
"registry-mirrors": ["https://l1tdhsj3.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
#查看docker是否启动
systemctl status docker
11.部署软件及配置
软件安装
所有k8s集群节点均需安装,默认YUM源是谷歌
需求 | kubeadm | kublet | kubectl | docker-ce |
---|---|---|---|---|
值 | 初始化集群,管理集群等,版本为:1.18.0-0 | 用于接收api-server指令,对pod生命周期进行管理,版本为:1.18.0-0 | 集群命令行管理工具,版本为:1.18.0-0 | 20.10.9 |
vi /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
查看kubeadm版本
yum list|grep kubeadm
kubeadm.x86_64 1.18.0-0 kubernetes
不指定kubernetes版本默认会安装最新版本,但最新版本可能与docker-ce版本不兼容,所以最好指定版本安装
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
12.软件设置
主要配置kublet,如果不配置可能会导致k8s集群无法启动
为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容
[root@master1 ~]# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
#启动kubelet
systemctl enable kubelet
查看kubelet的运行状态
systemctl status kubelet
13.k8s集群容器镜像准备
由于使用kubeadm部署集群,集群所有核心组件均以Pod运行,需要为主机准备镜像,不同角色主机准备不同镜像
[root@master1 ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.24.1
k8s.gcr.io/kube-controller-manager:v1.24.1
k8s.gcr.io/kube-scheduler:v1.24.1
k8s.gcr.io/kube-proxy:v1.24.1
k8s.gcr.io/pause:3.7
k8s.gcr.io/etcd:3.5.3-0
k8s.gcr.io/coredns/coredns:v1.8.6
#列出镜像列表到文件中,便于下载使用
[root@master1 ~]# kubeadm config images list >> image.list
查看已列出镜像文件列表
[root@master1 ~]# cat image.list
k8s.gcr.io/kube-apiserver:v1.18.20
k8s.gcr.io/kube-controller-manager:v1.18.20
k8s.gcr.io/kube-scheduler:v1.18.20
k8s.gcr.io/kube-proxy:v1.18.20
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
编写镜像下载脚本,因为在安装kubernetes过程中,需要从k8s.grc.io仓库中拉取所需镜像文件,但由于网络原因,无法从goole中拉取镜像,可以替换国内源
[root@master1 ~]# vim image.list
#!/bin/bash
images=(
kube-apiserver:v1.18.20 #每个人安装的版本不一样,选择自己前面安装的版本即可
kube-controller-manager:v1.18.20
kube-scheduler:v1.18.20
kube-proxy:v1.18.20
pause:3.2
etcd:3.4.3-0
coredns:1.6.7
)
for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
14.集群初始化
下面的操作只需要在master节点上执行
#创建集群
kubeadm init \
--apiserver-advertise-address=192.168.1.138 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
出现successfully表明创建集群成功:
下一步可以根据 上一步创建集群给出的提示来执行命令
#创建必要文件
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#在node1,node2上执行如下命令
kubeadm join 192.168.1.138:6443 --token x3jsr6.1seu0czams441m1n \
--discovery-token-ca-cert-hash sha256:92c9f1eadc7496880e35e4e3ffdf6c
#默认token有效期为24小时,当过期之后,该token就不可用了。这时需要重新创建token
kubeadm token create --print-join-command
#拉取flannel网络
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
此时可以查看node1,node2的 kubelet运行状态,同时可以发现master主机上的状态是ready
15.集群测试
#创建一个nginx服务
kubectl create deployment nginx --image=nginx:1.14-alpine
#暴露端口
kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
#查看服务
kubectl get pod,svc
最终访问浏览器,查看运行结果
更多推荐
已为社区贡献1条内容
所有评论(0)