Ubuntu22.04部署K3s

Ubuntu22.04部署K3s

K3s 是一个轻量级的 Kubernetes 发行版,旨在简化和优化 Kubernetes 的安装和运行。K3s 使用了简化的架构,使其更适合在资源受限的环境中运行,如边缘设备、物联网(IoT)设备和低功耗硬件。K3s 的架构基于标准的 Kubernetes 组件,但对其进行了精简和优化。

官方文档:https://docs.k3s.io/zh/

https://docs.rancher.cn/docs/k3s/_index

K3s 集群的典型拓扑

  • Server 节点指的是运行 k3s server 命令的主机,control plane 和数据存储组件由 K3s 管理。
  • Agent 节点指的是运行 k3s agent 命令的主机,不具有任何数据存储或 control plane 组件。
  • Server 和 Agent 都运行 kubelet、容器运行时和 CNI。

1. 单节点模式

在单节点模式下,k3s serverk3s agent 运行在同一台机器上。适用于测试环境或资源非常有限的环境。

1
2
3
4
5
6
[Master Node] (K3s server + agent)
└── K3s API Server
└── K3s Controller Manager
└── K3s Scheduler
└── etcd (默认使用 SQLite)
└── K3s agent (用于运行容器和 Pod)

2. 多节点模式

在多节点模式下,k3s server 可以部署多个实例以提供高可用性,而 k3s agent 部署在多个工作节点上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Master Node 1] (K3s server)
└── K3s API Server
└── K3s Controller Manager
└── K3s Scheduler
└── etcd (或外部 etcd)

[Master Node 2] (K3s server) <- 高可用配置
└── K3s API Server
└── K3s Controller Manager
└── K3s Scheduler

[Worker Node 1] (K3s agent)
└── K3s agent
└── 容器运行时

[Worker Node 2] (K3s agent)
└── K3s agent
└── 容器运行时

在 Ubuntu 22.04 上部署 K3s 单节点模式是非常简单的。以下是安装步骤,涵盖了从安装 K3s 到验证集群是否正常运行的完整过程。

步骤 1:准备环境

确保你的 Ubuntu 22.04 机器有互联网连接,并且已经更新了系统。

  1. 更新系统
    在安装 K3s 之前,先确保系统是最新的:
1
2
sudo apt update
sudo apt upgrade -y

2.安装Docker

1
apt install docker.io

步骤 2:安装 K3s

1.使用官方安装脚本安装 K3s

1
2
3
4
curl –sfL \
https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
INSTALL_K3S_MIRROR=cn sh -s - \
--system-default-registry "registry.cn-hangzhou.aliyuncs.com"

列出 所有命名空间 下的所有 服务(services)

1
kubectl get services --all-namespaces

列出 所有命名空间 下的所有 Pod

1
kubectl get pods --all-namespaces

查看名为 kuboard-etcd-gvx6q 的 Pod 在 kuboard 命名空间中的详细信息

1
kubectl describe pod kuboard-etcd-gvx6q -n kuboard

2.配置镜像

Docker
1
2
3
echo '{"registry-mirrors": ["https://docker.1ms.run"]}' | sudo tee /etc/docker/daemon.json > /dev/null
systemctl daemon-reload
systemctl restart docker
K3s
1
2
3
4
5
6
7
cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
"docker.io":
endpoint:
- "https://docker.1ms.run"
EOF
systemctl restart k3s

安装完成后,K3s 会自动启动, 检查K3s服务的状态:

1
2
sudo systemctl status k3s

安装完成后通过以下指令获取k3s节点的工作状态

1
k3s kubectl get node

将会输出存在的节点的工作状态

1
2
NAME       STATUS   ROLES                  AGE    VERSION
ubuntu Ready control-plane,master 134m v1.29.5+k3s1

查看 K3S_TOKEN

1
sudo cat /var/lib/rancher/k3s/server/node-token

工作节点的安装(可选)

1
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.113.57:6443 K3S_TOKEN={K3S_TOKEN} sh -

根据需求把上面的 https://192.168.113.57:6443K3S_TOKEN更换成你的即可

K3s worker 节点的角色默认为none,如何修改?

可以通过kubectl label node 节点名称 node-role.kubernetes.io/worker=worker为节点增加 worker 角色。

配套工具

helm

Helm 是一个 Kubernetes 包管理工具,类似于 Linux 下的 aptyum,它帮助用户管理 Kubernetes 应用的安装、升级和配置。

helm官网地址:https://helm.sh/docs/intro/install/

在上面的文档中找到你的服务器对应系统的安装流程,下面是Ubuntu的安装流程

1
2
3
4
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

也可以Apt安装

1
2
3
4
5
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

然后复制k3s.yml到~/.kube/文件夹下即可

1
cp /etc/rancher/k3s/k3s.yaml ~/.kube/

测试helm命令:
image.png

kuboard

接着去安装kuboard这个面板来可视化管理集群。

1
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml

使用 watch kubectl get pods -n kuboard命令监控所有的Pod就绪

访问Kuboard

  • 在浏览器中打开链接http://your-node-ip-address:30080
    • 用户名:admin
    • 密码:Kuboard123

kube-explorer

Kube-Explorer 是一个用来探索和管理 Kubernetes 集群资源的工具。它的目的是简化与 Kubernetes 集群的交互,帮助用户更容易地查看、分析和管理 Kubernetes 中的各种资源,如 Pod、服务、部署、命名空间等。

https://github.com/cnrancher/kube-explorer

cert-manager

启用HTTPS访问你的服务

https://cert-manager.io/docs/installation/kubectl/

部署服务

这里以部署nginx为例

image-20241221105101161

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
apiVersion: apps/v1
kind: Deployment
metadata:
name: wx-mp-nginx-deployment
labels:
app: wx-mp-nginx
spec:
replicas: 1
selector:
matchLabels:
app: wx-mp-nginx
template:
metadata:
labels:
app: wx-mp-nginx
spec:
containers:
- name: wx-mp-nginx
image: nginx:1.23.1
ports:
- containerPort: 80
volumeMounts:
- name: nginx-data
mountPath: /usr/share/nginx/html/
volumes:
- name: nginx-data
hostPath:
path: /root/data/wx-mp-nginx
type: Directory

说明

img

此时,无法通过外网和服务间无法调用,需要部署service来实现,部署yaml如下

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Service
metadata:
name: wx-mp-nginx-service
spec:
type: NodePort
selector:
app: wx-mp-nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 31432

过NodePort方式,将服务开启在了31432端口

img

此时,在服务器安全组里添加【31432】端口,即可外网正常访问此时部署的Nginx服务了

如果有域名可以这样

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
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
ports:
- port: 80
name: nginx
targetPort: 80
type: ClusterIP
selector:
# apply service to any pod with label app: nginx
app: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress-1
annotations:
spec.ingressClassName: traefik
spec:
rules:
- host: nginx.abc.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80

这个yml包含Deployment、Service和traefik Ingress

如果没有域名,在本地的hosts添加代理

1
你的IP nginx.abc.com

Ubuntu22.04部署K3s
https://blog.quickso.cn/2024/12/21/Ubuntu22-04部署K3s/
作者
木子欢儿
发布于
2024年12月21日
许可协议