kubeadm部署k8s集群
系列文章
机器列表
IP地址 | 主机名 | 角色 |
---|---|---|
10.211.55.200 | ubuntu2204-adm-master | Master |
10.211.55.201 | ubuntu2204-adm-node1 | Node1 |
10.211.55.202 | ubuntu2204-adm-node2 | Node2 |
Parallels desktop虚机处理
PD处理虚机克隆后product_uuid相同的方法:
先解除绑定,可以使用删除并保留文件的方式,也可以使用命令行
1
2
3
4
5
6
7
8prlctl unregister ID|name
ID/name: 为虚拟机名字
比如我就是使用命令:
prlctl unregister "kubernetes01 node1"重新注册,注册的时候加上重新生成 UUID 的参数
1
2
3
4
5
6prlctl register path --regenerate-src-uuid
path: 虚拟机的 pvm 文件路径。
执行后重启 product_uuid 即更改。
Ubuntu22.04 虚机配置
每台机器的/etc/hosts配置:
1 | 10.211.55.200 ubuntu2204-adm-master |
K8S集群安装
官方文档:https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
以下操作都需要在3台机器中完成配置!
环境基础配置
关闭swap:
1
2
3swapoff -a
sed -i '/\/swap.img/ s/^\(.*\)$/#\1/g' /etc/fstab允许iptables检查桥接流量:
1
2
3
4
5
6
7
8
9
10
11
12modprobe br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
安装容器运行时(docker)
安装docker:
1
2
3
4apt update
apt install docker.io
docker version配置docker:
1
2
3
4
5
6
7
8换成阿里Docker仓库
cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://tk6cqevn.mirror.aliyuncs.com"]
}
EOF启动docker:
1
2
3
4systemctl restart docker
systemctl enable docker
docker info
安装 kubeadm、kubelet 和 kubectl
安装基础工具:
1
2apt-get install -y apt-transport-https ca-certificates curl
使用阿里云安装K8S工具:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20下载apt-key
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
添加阿里云K8S源
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新源
apt-get update
查看可以安装的k8s版本
apt-cache madison kubeadm
使用指定版本安装k8s
apt-get install -y kubelet=1.23.8-00 kubeadm=1.23.8-00 kubectl=1.23.8-00
安装最新版本
apt-get install -y kubelet kubeadm kubectl
systemctl enable kubelet
使用 kubeadm 创建集群
Master节点初始化
以下操作在Master节点中进行!
因网络较慢,所以先使用kubeadm config下载K8S组件镜像:
1
2
3
4
5
6
7
8
9
10
11
12
13查看当前会使用的k8s镜像版本
kubeadm config images list
使用阿里云的镜像仓库,拉取镜像到本地
kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version 1.23.8
镜像在一台主机上下载完成后,使用docker命令导出所有K8S相关的镜像
docker save -o k8s_1.23.8_all_images.tar `docker images | grep 'registry.cn-hangzhou.aliyuncs.com/google_containers' | awk '{print $1 ":" $2}' | xargs`
使用scp复制镜像压缩文件到其余2台机器,并导入镜像
docker load -i k8s_1.23.8_all_images.tar
docker images使用命令行方式初始化Master节点(二选一):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27kubeadm init \
--apiserver-advertise-address=10.211.55.200 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.23.8 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
参数解析
--apiserver-advertise-address # api-server的广播地址,一般跟 Master ip 地址相同
--image-repository # K8S组件镜像仓库地址,默认为k8s.gcr.io,由于国内无法访问,所以需要更改为阿里云的
--kubernetes-version # k8s版本
--service-cidr # service的网络地址范围
--pod-network-cidr # pod的网络地址范围
配置kubeconfig
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
将输出中的join信息保存下来,接下来的Node节点初始化需要用到
kubeadm join 10.211.55.200:6443 --token 2oa********z9u \
--discovery-token-ca-cert-hash sha256:ea7874e7f3f9e651********847791
如果只想安装单机的K8S,可将Master节点的污点属性清除,让pod能调度到该节点上
kubectl describe node ubuntu2204-adm-master | grep Taints
kubectl taint nodes ubuntu2204-adm-master node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-使用配置文件方式初始化Master节点(二选一):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57生成初始化yml配置文件
kubeadm config print init-defaults > kubeadm.yaml
编辑配置文件
kubeadm-config配置字段详解:https://kubernetes.io/zh-cn/docs/reference/config-api/kubeadm-config.v1beta3/
vim kubeadm.yaml
修改api-server的广播地址
localAPIEndpoint.advertiseAddress: 10.211.55.200
修改Master节点名
nodeRegistration.name: ubuntu2204-adm-master
修改K8S组件镜像仓库地址
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
修改K8S版本
kubernetesVersion: 1.23.8
新增pod网络范围
podSubnet: 10.244.0.0/16
其余配置,请根据自身需求,查询官方手册自行添加!
kubeadm.yml文件样例:
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.211.55.200
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
imagePullPolicy: IfNotPresent
name: ubuntu2204-adm-master
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.23.8
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16
scheduler: {}如果需要配置kube-proxy的工作模式为ipvs,可在kubeadm.yaml文件中加入以下配置:
1
2
3
4
5
6kube-proxy配置字段详解:https://kubernetes.io/zh-cn/docs/reference/config-api/kube-proxy-config.v1alpha1/
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs初始化master:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20查询初始化会使用的镜像列表
kubeadm config images list --config=kubeadm.yaml
初始化
kubeadm init --config kubeadm.yaml
配置kubeconfig
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
将输出中的join信息保存下来,接下来的Node节点初始化需要用到
kubeadm join 10.211.55.200:6443 --token 2oa********z9u \
--discovery-token-ca-cert-hash sha256:ea7874e7f3f9e651********847791
如果只想安装单机的K8S,可将Master节点的污点属性清除,让pod能调度到该节点上
kubectl describe node ubuntu2204-adm-master | grep Taints
kubectl taint nodes ubuntu2204-adm-master node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-若安装过程出错,可卸载干净K8S,再重试:
1
2
3
4
5
6
7卸载k8s master
kubeadm reset -f
rm -rf /etc/cni/net.d
rm -rf $HOME/.kube/
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvsadm -C
Node节点初始化
以下操作在2台Nde节点机器中进行!
1 | 检查master节点操作时,K8S组件镜像有无导入成功 |
部署 CNI 网络插件
这里选择flannel作为CNI插件。
部署flannel插件,容器镜像下载较慢,建议自备梯子下载,或找国内别人搭建的镜像仓库下载。
1 | flannel部署文件:https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml |
检查集群状态
1 | kubectl get nodes |
此文章版权归ZhongJin所有,如有转载,请注明原作者和出处!
评论