K3s安装

安装基础环境

新装环境

Master节点安装

1
2
3
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_EXEC='--write-kubeconfig-mode=644' sh -

Worker节点加入集群

1
2
3
4
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
K3S_URL=https://<k3s-server-ip>:6443 \
K3S_TOKEN=<token> \
INSTALL_K3S_EXEC='--write-kubeconfig-mode=644' sh -

参数说明:

  • <k3s-server-ip>: K3s服务器的IP地址
  • <token>: K3s服务器生成的唯一令牌,可通过以下命令获取:
    1
    sudo cat /var/lib/rancher/k3s/server/node-token

INSTALL_K3S_EXEC 参数

参数 说明
--write-kubeconfig-mode=644 设置配置文件权限
--service-node-port-range=1-65535 解除端口限制(默认30000-32767)
--advertise-address=192.168.1.1 指定集群管理IP,默认端口6443
--disable=traefik 禁用Traefik Ingress
--disable=local-path 禁用本地存储
--default-local-storage-path=/mnt/storage/k3s 自定义本地存储的默认存储路径

环境变量

  • INSTALL_K3S_MIRROR=cn: 设置中国区镜像
  • INSTALL_K3S_SKIP_SELINUX_RPM=true: 安装由于selinux导致失败时可加此配置跳过k3s selinux配置

配置kubeconfig

1
echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> ~/.bashrc

修改local-path存储类回收策略

local-path默认的storage class回收策略为Delete,当容器被删除时会删除容器关联的PV。生产环境建议改为Retain

![[K3S安装/IMG-20260205215844841.png]]

1
2
3
4
5
6
7
8
# 查看当前存储类
kubectl get storageclasses.storage.k8s.io local-path

# 删除原有存储类
kubectl delete storageclasses.storage.k8s.io local-path

# 应用修改后的存储类
kubectl apply -f storage-class.yaml

storage-class.yaml内容:

1
2
3
4
5
6
7
8
9
10
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
defaultVolumeType: local
storageclass.kubernetes.io/is-default-class: "true"
name: local-path
provisioner: rancher.io/local-path
reclaimPolicy: Retain # 此处修改为Retain
volumeBindingMode: WaitForFirstConsumer

现有环境修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 停止k3s服务
sudo systemctl stop k3s.service

# 编辑服务配置文件
vim /etc/systemd/system/k3s.service

# 修改ExecStart部分
# 原有内容:
ExecStart=/usr/local/bin/k3s \
server \
'--write-kubeconfig-mode=644'

# 修改后:
ExecStart=/usr/local/bin/k3s \
server \
'--write-kubeconfig-mode=644' \
'--service-node-port-range=1-65535' \
'--default-local-storage-path=/mnt/storage/k3s'

# 重新加载配置并启动服务
sudo systemctl daemon-reload
sudo systemctl start k3s.service

安装管理工具Helm

1
2
3
4
5
6
7
8
9
10
11
# 在线安装
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Ubuntu使用snap安装
sudo snap install helm --classic

# 离线安装
# 1. 下载最新版离线安装包:https://github.com/helm/helm/releases
# 2. 解压并安装
tar xf helm-v2.11.0-linux-amd64.tar.gz
cp linux-amd64/helm linux-amd64/tiller /usr/local/bin/

添加命令自动补全

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装bash-completion
sudo apt install bash-completion
source /usr/share/bash-completion/bash_completion

# kubectl自动补全
# 临时使用
echo 'source <(kubectl completion bash)' >> ~/.bashrc

# 永久生效
kubectl completion bash | sudo tee /etc/bash_completion/kubectl > /dev/null

# helm自动补全
# 临时使用
echo 'source <(helm completion bash)' >> ~/.bashrc

# 永久生效
helm completion bash | sudo tee /etc/bash_completion/helm > /dev/null

常用Helm Charts

常用命令

Kubernetes命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看集群所有资源
kubectl get all -A -o wide

# 查看指定命名空间
kubectl get all -n {namespace name}

# 查看容器日志
kubectl logs -n {namespace name} pod/{pod name}

# 查看资源详细信息
kubectl describe -n {namespace name} [service|pod|secret|certificate|...]

# 查看节点信息
kubectl get node --show-labels -o wide

# 重启Pod
kubectl rollout restart {pod name} -n {namespace}

# 伸缩实例数量
kubectl scale deploy whoami --replicas=5

# 查看集群信息
kubectl cluster-info

Helm命令

1
2
# 获取charts的values文件
helm show values bitnami/redis > values.yaml

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 创建2副本的whoami应用
kubectl create deploy whoami --image=traefik/whoami --replicas=2

# 查看部署应用信息
kubectl describe deploy whoami

# 监控Pod状态
kubectl get pods --watch

# 扩容到5个副本
kubectl scale deploy whoami --replicas=5

# 发布K3s内网的服务
kubectl expose deploy whoami --port=80

# 查看服务状态
kubectl get svc whoami -owide
kubectl describe svc whoami

# 映射端口到宿主机(LoadBalancer类型)
kubectl expose deploy whoami --type=LoadBalancer --port=80 --external-ip <PUBLIC_IP>

# 清空测试资源
kubectl delete all --all

请求链路理解:

1
request public-ip -> node-port -> svc-port -> pod-port -> container

配置国内源(私有镜像库)

K3s 默认的 containerd 配置文件目录为 /var/lib/rancher/k3s/agent/etc/containerd/config.toml。K3s 会在启动时检查 /etc/rancher/k3s/ 中是否存在 registries.yaml 文件,如果存在则根据其内容转换为 containerd 配置。

配置文件由两部分组成:

  • Mirrors: 定义专用镜像仓库的名称和 endpoint
  • Configs: 定义每个 mirror 的 TLS 和证书配置

非安全(http)私有仓库配置

无认证

1
2
3
4
mirrors:
"172.31.6.200:5000":
endpoint:
- "http://172.31.6.200:5000"

有认证

1
2
3
4
5
6
7
8
9
mirrors:
"35.182.134.80":
endpoint:
- "http://35.182.134.80"
configs:
"35.182.134.80":
auth:
username: admin
password: Harbor12345

安全(https)私有仓库配置

使用授信SSL证书

1
2
3
4
5
6
7
8
9
mirrors:
"harbor.kingsd.top":
endpoint:
- "https://harbor.kingsd.top"
configs:
"harbor.kingsd.top":
auth:
username: admin
password: Harbor12345

使用自签SSL证书

1
2
3
4
5
6
7
8
9
10
11
mirrors:
"harbor-ksd.kingsd.top":
endpoint:
- "https://harbor-ksd.kingsd.top"
configs:
"harbor-ksd.kingsd.top":
auth:
username: admin
password: Harbor12345
tls:
ca_file: /opt/certs/ca.crt

SSL双向认证

1
2
3
4
5
6
7
8
9
10
11
12
13
mirrors:
"harbor-ksd.kingsd.top":
endpoint:
- "https://harbor-ksd.kingsd.top"
configs:
"harbor-ksd.kingsd.top":
auth:
username: admin
password: Harbor12345
tls:
ca_file: /opt/certs/ca.crt
cert_file: /opt/certs/harbor-ksd.kingsd.top.cert
key_file: /opt/certs/harbor-ksd.kingsd.top.key

加速器配置

1
2
3
4
5
mirrors:
"docker.io":
endpoint:
- "https://fogjl973.mirror.aliyuncs.com"
- "https://registry-1.docker.io"

参考