K8S集群搭建

K8S集群搭建

一,环境准备

操作系统

IP

hostname

centos7.6

192.168.200.15

k8s-master

centos7.6

192.168.200.56

k8s-node

以下操作在所有节点上执行

1.1,修改hostname

1,master节点
[root@localhost ~]# hostnamectl set-hostname k8s-master
[root@localhost ~]# bash
[root@k8s-master ~]# 
2,node节点
[root@localhost ~]# hostnamectl set-hostname k8-snode
[root@localhost ~]# bash
[root@k8-snode ~]# 

1.2, 设置/etc/hosts 一对一的映射关系

[root@k8s-master ~]# cat >>/etc/hosts<< EOF
> 192.168.200.15 k8s-master
> 192.168.200.56 k8s-node
> EOF
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.15 k8s-master
192.168.200.56 k8s-node
[root@k8s-master ~]#  
​

 

1.3,设置时间同步

[root@k8s-master ~]# systemctl start chronyd
[root@k8s-master ~]# systemctl enable chronyd
[root@k8s-master ~]# date
2023年 02月 15日 星期三 10:46:09 CST
[root@k8s-master ~]#

1.4,关闭防火墙和selinux

systemctl stop firewalld #临时关闭
systemctl disable firewalld #永久关闭,即设置开机的时候不自动启动
​
[root@localhost html]# setenforce 0  #临时关闭
[root@localhost html]# vim /etc/sysconfig/selinux  #永久关闭
vi /etc/sysconfig/selinux 文件
将SELINUX=(disable或permissive)
\##重启服务
[root@localhost]# shutdown -r now 

1.5,禁用swap空间

[root@k8s-master ~]# swapoff -a   #临时关闭
​
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
#/dev/mapper/centos-swap swap

1.6,修改内核参数,添加网桥过滤和地址转发功能

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
重新加载配置
sysctl --system

 

二,docker的安装

2.1,安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

2.2,设置yum 源

设置一个yum源,下面两个都可用(测试中央仓库比较快)

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)

2.3,选择docker版本并安装

(1)查看可用版本有哪些

yum list docker-ce --showduplicates |sort -r

(2)选择一个版本并安装:yum installdocker-ce-版本号

yum -y install docker-ce-18.03.1.ce

(3) 配置docker加速

mkdir /etc/docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors":
["https://ywrd8tun.mirror.aliyuncs.com"]
}
EOF

2.4,启动 Docker 并设置开机自启

systemctl start docker
systemctl enable docker

2.5, 部署 cri-dockerd

从kubernetes 1.24开始,dockershim已经从kubelet中移 除,但因为历史问题docker不支持kubernetes主推的CRI (容器运行时接口)标准,所以docker不能再作为 kubernetes的容器运行时了,即从kubernetesv1.24开始不 再使用docker了。 但是如果想继续使用docker的话,可以在kubelet和docker之 间加上一个中间层cri-docker。cri-docker是一个支持CRI标准 的shim(垫片)。一头通过CRI跟kubelet交互,另一头跟 docker api交互,从而间接的实现了kubernetes以docker作 为容器运行时。

开源地址 https://github.com/Mirantis/cri-dockerd 下载地址 https://github.com/Mirantis/cridockerd/releases

2.5.1 下载并上传进行解压

#使用rz命令上传
# rz
[root@k8s-node ~]# ls
anaconda-ks.cfg cri-dockerd-0.3.1.amd64.tgz
[root@k8s-node ~]# tar xf cri-dockerd0.3.1.amd64.tgz
[root@k8s-node ~]# cp cri-dockerd/cri-dockerd
/usr/bin/
[root@k8s-node ~]# chmod +x /usr/bin/cridockerd
[root@k8s-node ~]#

2.5.2 配置启动文件

cat <<"EOF" > /usr/lib/systemd/system/cridocker.service
[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 --networkplugin=cni --pod-infra-containerimage=registry.aliyuncs.com/google_containers/p
ause:3.7
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF

2.5.3 ⽣成 socket ⽂件,执行如下命令

cat <<"EOF" > /usr/lib/systemd/system/cridocker.socket
[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
EOF
​

2.5.4 启动 cri-docker 并设置开机⾃动启动

[root@k8s-node ~]# systemctl daemon-reload
[root@k8s-node ~]# systemctl enable cridocker --now
Created symlink from /etc/systemd/system/multiuser.target.wants/cri-docker.service to
/usr/lib/systemd/system/cri-docker.service.
[root@k8s-node ~]# systemctl is-active cridocker
active
[root@k8s-node ~]#

 

三,部署k8s

3.1 配置添加阿里云的yum源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/y
um/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yu
m/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/r
pm-package-key.gpg
EOF

3.2 安装kubeadm kubelet kubectl

yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0
查看版本并设置开机自启动
[root@k8s-master ~]# kubeadm version
kubeadm version: &version.Info{Major:"1",
Minor:"25", GitVersion:"v1.25.0",
GitCommit:"a866cbe2e5bbaa01cfd5e969aa3e033f3282
a8a2", GitTreeState:"clean", BuildDate:"2022-
08-23T17:43:25Z", GoVersion:"go1.19",
Compiler:"gc", Platform:"linux/amd64"}
[root@k8s-master ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multiuser.target.wants/kubelet.service to
/usr/lib/systemd/system/kubelet.service.
[root@k8s-master ~]#

到目前位置,所有的操作都是在全部节点上操作的。接下来 开始初始化k8s-master的节点,以下操作只在k8s-master 上执行:

3.3 k8s-master节点初始化

kubeadm 使用 eth0 的默认网络接口(通常是内网IP)做为 Master 节点的 advertise address .所以这里的IP地址要设置为内网的IP地址:

kubeadm init \
--apiserver-advertise-address=192.168.1.41 \
--image-repository
registry.aliyuncs.com/google_containers \
--kubernetes-version v1.25.0 \
--service-cidr=10.10.0.0/12 \
--pod-network-cidr=172.17.0.0/16 \
--cri-socket /var/run/cri-dockerd.sock \
--ignore-preflight-errors=all


###################注释########################
--apiserver-advertise-address=192.168.1.41
这个参数就是master主机的IP地址
--imagerepository=registry.aliyuncs.com/google_containers
这个是镜像地址,由于国外地址无法访问,故使用的阿里云仓库
地址:registry.aliyuncs.com/google_containers
--kubernetes-version=v1.25.0
这个参数是下载的k8s软件版本号
--service-cidr=10.10.0.0/12
无需更改
--pod-network-cidr=172.17.0.0/16
Specify range of IP addresses for the pod
network. If set, the control plane will
automatically allocate CIDRs for every node.
该参数指明了 Pod 网络的 CIDR,以用于 Node 相关配置

若执行中出现问题,想要重新执行,可以先运行:

[root@k8s-master ~]# kubeadm reset -f

3.4 执行成功后,会有加入节点的代码,然后复制到其他节点进行加入。

按照下图提示,在k8s-master上创建必要的文件,然后在用最后的join把别的加点加入

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf
$HOME/.kube/config
sudo chown $(id -u):$(id -g)
$HOME/.kube/config

尤其注意最后一条,cri-socket ,这条容易漏掉。

kubeadm join 192.168.1.41:6443 --token
9rmt8j.2pqoh7drm68ns249 \
--discovery-token-ca-cert-hash
sha256:ff558174c47aba532fef2920f80e1f48976d4712
a970eba1a7fac0428c8373ab
--cri-socket /var/run/cri-dockerd.sock

[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE
VERSION
k8s-master NotReady control-plane 5m5s
v1.25.0
k8s-node42 NotReady <none> 75s
v1.25.0
[root@k8s-master ~]#
posted @ 2023-09-06 16:22  Charlottexss  阅读(41)  评论(0)    收藏  举报