k8s在线部署-使用kubeasz部署amd64单机版k8s1-26-0

一、单机快速部署-AllinOne部署

​ kubeasz 致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书;基于二进制方式部署和利用ansible-playbook实现自动化;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。kubeasz 从每一个单独部件组装到完整的集群,提供最灵活的配置能力,几乎可以设置任何组件的任何参数;同时又为集群创建预置一套运行良好的默认配置,甚至自动化创建适合大规模集群的BGP Route Reflector网络模式。

​ kubeasz支持多个不同的k8s版本,大致如下,具体支持细节请查看官网。如果不使用匹配的kubeasz部署k8s可能会报错,需要自己解决,所以建议还是按照如下表格使用kubeasz。

Kubernetes 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31
kubeasz 3.1.1 3.2.0 3.6.2 3.6.2 3.6.2 3.6.2 3.6.2 3.6.3 3.6.4 3.6.5

​ kubeasz它支持amd64与arm64两种不同的服务器构架平台。支持用来部署常用插件:DNS dashboard metrics-server prometheus efk,也支持用来常见周边生态:harbor helm jenkins gitlab argocd 。如果官网现有功能不能满足自己的需求,还可以自己继续编写playbook进一步丰富kubeasz。

​ kubeasz不像青云的kubekey工具是对kubeadm工具的封装,kubeasz是使用二进制方式的部署形式,所以相关k8s服务都是以操作系统服务的形式部署在服务器上,但部署服务如网络解决方案、dashboard等是以容器形式部署的。

1.1 安装步骤

1.1.1 基础系统配置

  • 准备一台虚机配置内存2G/硬盘30G以上
  • 最小化安装Ubuntu 16.04+ server或者CentOS 7+ Minimal
  • 配置基础网络、更新源、SSH登录等

注意: 确保在干净的系统上开始安装,不能使用曾经装过kubeadm或其他k8s发行版的环境

主机名 IP root密码 规格 磁盘 操作系统
k8s03-1 10.13.15.61 cloud@2020 8c16g 400G Ubuntu20.04.3 LTS-amd64

1.1.2 下载文件

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
#参考文档:https://github.com/easzlab/kubeasz/blob/3.5.3/docs/setup/quickStart.md
#以下文档示例,使用kubeasz3.5.0部署k8s1.26.0,k8s环境使用的默认容器运行时是containerd
root@k8s03-1:~# mkdir -p /opt/kubeasz-deployk8s
root@k8s03-1:~# cd /opt/kubeasz-deployk8s
root@k8s03-1:/opt/kubeasz-deployk8s# export release=3.5.0
root@k8s03-1:/opt/kubeasz-deployk8s# wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
root@k8s03-1:/opt/kubeasz-deployk8s# chmod +x ./ezdown
#ezdown其实就是一个shell脚本文件,可以修改此文件内容,比如修改其中对/etc/docker/daemon.json文件内容的定制
root@k8s03-1:/opt/kubeasz-deployk8s# vi ezdown
...
# configuration for dockerd
mkdir -p /etc/docker
DOCKER_VER_MAIN=$(echo "$DOCKER_VER"|cut -d. -f1)
CGROUP_DRIVER="cgroupfs"
((DOCKER_VER_MAIN>=20)) && CGROUP_DRIVER="systemd"
logger debug "generate docker config: /etc/docker/daemon.json"
if [[ "$REGISTRY_MIRROR" == CN ]];then
logger debug "prepare register mirror for $REGISTRY_MIRROR"
cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=$CGROUP_DRIVER"],
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#下载kubeasz代码、二进制、默认容器镜像
root@k8s03-1:/opt/kubeasz-deployk8s# ./ezdown -D -m "CN"
...
Digest: sha256:6ef53c7bd8b73841c5e10698d21f5616c3c2f329afeca7f342d7471cae6af310
Status: Image is up to date for easzlab/kubeasz:3.5.0
docker.io/easzlab/kubeasz:3.5.0
2024-10-10 16:45:35 INFO Action successed: download_all

root@k8s03-1:/opt/kubeasz-deployk8s# ./ezdown -S
2024-10-10 16:49:12 INFO Action begin: start_kubeasz_docker
2024-10-10 16:49:12 INFO try to run kubeasz in a container
2024-10-10 16:49:12 DEBUG get host IP: 10.13.15.61
2024-10-10 16:49:12 DEBUG generate ssh key pair
# 10.13.15.61:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11
2024-10-10 16:49:12 DEBUG create a soft link '/usr/bin/python'
a9db032e35a0a43f6d5bdf293feef657a4b6b92cb8d1e1786398ec5ea8f3505d
2024-10-10 16:49:13 INFO Action successed: start_kubeasz_docker

1.1.3 安装集群

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
#容器化运行 kubeasz
root@k8s03-1:/opt/kubeasz-deployk8s# ./ezdown -S
2024-10-10 16:49:12 INFO Action begin: start_kubeasz_docker
2024-10-10 16:49:12 INFO try to run kubeasz in a container
2024-10-10 16:49:12 DEBUG get host IP: 10.13.15.61
2024-10-10 16:49:12 DEBUG generate ssh key pair
# 10.13.15.61:22 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11
2024-10-10 16:49:12 DEBUG create a soft link '/usr/bin/python'
a9db032e35a0a43f6d5bdf293feef657a4b6b92cb8d1e1786398ec5ea8f3505d
2024-10-10 16:49:13 INFO Action successed: start_kubeasz_docker

#查看已创建容器
root@k8s03-1:/opt/kubeasz-deployk8s# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9db032e35a0 easzlab/kubeasz:3.5.0 "sleep 36000" 4 minutes ago Up 4 minutes kubeasz
7feaec7a91fc registry:2 "/entrypoint.sh /etc…" 27 minutes ago Up 27 minutes local_registry

#使用默认配置安装 aio 集群(部署单节点k8s环境,大概花费5min)
root@k8s03-1:/opt/kubeasz-deployk8s# docker exec -it kubeasz ezctl start-aio
PLAY RECAP ********************************************************************************************************************
10.13.15.61 : ok=110 changed=101 unreachable=0 failed=0 skipped=188 rescued=0 ignored=0
localhost : ok=43 changed=40 unreachable=0 failed=0 skipped=42 rescued=0 ignored=0
# 如果安装失败,查看日志排除后,使用如下命令重新安装aio集群
# docker exec -it kubeasz ezctl setup default all

1.1.4 验证安装

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
root@k8s03-1:/opt/kubeasz-deployk8s# source ~/.bashrc
root@k8s03-1:/opt/kubeasz-deployk8s# kubectl version # 验证集群版本
root@k8s03-1:/opt/kubeasz-deployk8s# kubectl get node # 验证节点就绪 (Ready) 状态
NAME STATUS ROLES AGE VERSION
10.13.15.61 Ready master 2m38s v1.26.0

root@k8s03-1:/opt/kubeasz-deployk8s# kubectl get pod -A # 验证集群pod状态,默认已安装网络插件、coredns、metrics-server等
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-89b744d6c-csmv5 1/1 Running 0 2m32s
kube-system calico-node-52tdd 1/1 Running 0 2m32s
kube-system coredns-6665999d97-lcpdr 1/1 Running 0 2m2s
kube-system dashboard-metrics-scraper-57566685b4-5k8sl 1/1 Running 0 114s
kube-system kubernetes-dashboard-57db9bfd5b-5pqs8 1/1 Running 0 114s
kube-system metrics-server-6bd9f986fc-rqtq7 1/1 Running 0 118s
kube-system node-local-dns-tbzqv 1/1 Running 0 2m

root@k8s03-1:/opt/kubeasz-deployk8s# kubectl get svc -A # 验证集群服务状态
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 3m19s
kube-system dashboard-metrics-scraper ClusterIP 10.68.149.37 <none> 8000/TCP 2m
kube-system kube-dns ClusterIP 10.68.0.2 <none> 53/UDP,53/TCP,9153/TCP 2m8s
kube-system kube-dns-upstream ClusterIP 10.68.74.235 <none> 53/UDP,53/TCP 2m6s
kube-system kubernetes-dashboard NodePort 10.68.224.175 <none> 443:30033/TCP 2m1s
kube-system metrics-server ClusterIP 10.68.57.219 <none> 443/TCP 2m5s
kube-system node-local-dns ClusterIP None <none> 9253/TCP 2m6s

#查看所有containerd容器
root@k8s03-1:/opt/kubeasz-deployk8s# crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
98f418ea2b5ae 115053965e86b 3 minutes ago Running dashboard-metrics-scraper 0 ca4d7ade6cd66 dashboard-metrics-scraper-57566685b4-5k8sl
3f267e5ad38c8 07655ddf2eebe 3 minutes ago Running kubernetes-dashboard 0 ddd9fca9b3fde kubernetes-dashboard-57db9bfd5b-5pqs8
2f980e0974596 f965999d664b1 3 minutes ago Running metrics-server 0 888d8720dc5a8 metrics-server-6bd9f986fc-rqtq7
182a39d21a858 7b3b529c5a5ac 3 minutes ago Running node-cache 0 a8b15ecf9ae75 node-local-dns-tbzqv
41f63fb1329d7 5185b96f0becf 3 minutes ago Running coredns 0 84336de34a8ac coredns-6665999d97-lcpdr
66a0024a1c6e6 b6e6ee0788f20 4 minutes ago Running calico-node 0 867af30138653 calico-node-52tdd
df75b01d5a24b ea5536b1fa4a8 4 minutes ago Running calico-kube-controllers 0 5eddd6e6e960d calico-kube-controllers-89b744d6c-csmv5
  • 登录 dashboard可以查看和管理集群,更多内容请查阅dashboard文档

此k8s环境中,dashboard的访问地址是:https://10.13.15.61:30033/#/login,其中30033端口来自上述svc:kube-system/kubernetes-dashboard

1.2 卸载集群

在宿主机上,按照如下步骤清理

  • 清理集群 docker exec -it kubeasz ezctl destroy default
  • 重启节点,以确保清理残留的虚拟网卡、路由等信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#清理集群 
root@k8s03-1:/opt/kubeasz-deployk8s# docker exec -it kubeasz ezctl destroy default
ansible-playbook -i clusters/default/hosts -e @clusters/default/config.yml playbooks/99.clean.yml
2024-10-10 09:31:06 INFO cluster:default destroy begins in 5s, press any key to abort:
...
TASK [clean : 重启提示 WARNNING] ********************************************************************************************************************************
ok: [10.13.15.61] => {
"msg": "[重要]: 请重启节点以确保清除系统残留的虚拟网卡、路由信息、iptalbes|ipvs规则等 [IMPORTANT]: please reboot nodes, makesure to clean out net interfaces, routes and iptables/ipvs rules"
}

PLAY RECAP ********************************************************************************************************************************
10.13.15.61 : ok=14 changed=12 unreachable=0 failed=0 skipped=14 rescued=0 ignored=0

root@k8s03-1:/opt/kubeasz-deployk8s# reboot

1.3 问题

1.3.1 执行"./ezdown -D"下载镜像easzlab/kubeasz:3.5.0失败

1
2
3
4
5
#报错大致如下
Unable to find image 'easzlab/kubeasz:3.5.0' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 199.16.158.12:443: i/o timeout.
See 'docker run --help'.
2024-10-10 14:08:58 ERROR download failed.

解决办法1(推荐):

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
#此方法是为docker设置多个镜像网站,从而增加拉取镜像的可能性
root@k8s03-1:~# cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://kuamavit.mirror.aliyuncs.com",
"https://docker.chenby.cn",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
],
"insecure-registries": [
"http://easzlab.io.local:5000"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF

root@k8s03-1:~# systemctl daemon-reload && systemctl restart docker
#此命令运行过程上会下载多个镜像(kubeasz:3.5.0,默认安装k8s1.26.0,此步骤共下载13个镜像),需要的执行较长,我总共大概花费了20分钟
root@k8s03-1:~# ./ezdown -D

解决办法2:

1
2
#先在其他能使用魔法的服务器上将此镜像下载下来,上传到自己的harbor仓库:docker push 10.10.10.1:8196/kubeasz/easzlab/kubeasz:3.5.0 (假设"10.10.10.1:8196"自己的harbor镜像仓库地址)
#然后在需要使用上述镜像的服务器上下载自己harbor仓库中的镜像,再执行上述命令一般就会成功了。从使用经验来看,已有相同镜像的话(即使已经被tag成不同的镜像名与标签名),再直接从docker hub官网拉取此镜像大概率能成功。

解决办法3:

如果上述方法都不凑效,可以直接修改“ezdown”文件,它其实就是一个shell脚本文件。可以直接在此文件中修改为直接使用自己harbor镜像仓库中的镜像。


k8s在线部署-使用kubeasz部署amd64单机版k8s1-26-0
https://jiangsanyin.github.io/2024/11/28/k8s在线部署-使用kubeasz部署amd64单机版k8s1-26-0/
作者
sanyinjiang
发布于
2024年11月28日
许可协议