安装基础环境
新装环境
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 volumeBindingMode: WaitForFirstConsumer
|
现有环境修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| sudo systemctl stop k3s.service
vim /etc/systemd/system/k3s.service
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
sudo snap install helm --classic
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
| sudo apt install bash-completion source /usr/share/bash-completion/bash_completion
echo 'source <(kubectl completion bash)' >> ~/.bashrc
kubectl completion bash | sudo tee /etc/bash_completion/kubectl > /dev/null
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
kubectl rollout restart {pod name} -n {namespace}
kubectl scale deploy whoami --replicas=5
kubectl cluster-info
|
Helm命令
1 2
| 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
| kubectl create deploy whoami --image=traefik/whoami --replicas=2
kubectl describe deploy whoami
kubectl get pods --watch
kubectl scale deploy whoami --replicas=5
kubectl expose deploy whoami --port=80
kubectl get svc whoami -owide kubectl describe svc whoami
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"
|
参考