安装基础环境 新装环境 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \ INSTALL_K3S_MIRROR=cn \ INSTALL_K3S_EXEC='--write-kubeconfig-mode=644' sh - 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服务器生成的唯一令牌。可以使用以下命令在K3s服务器上获取此令牌:
1 sudo cat /var/lib/rancher/k3s/server/node-token
设置 kubeconfig 文件路径用于对 Kubernetes 集群的访问。
1 echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> ~/.bashrc
现有环境修改 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 sudo systemctl stop k3s.servicevim /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-reloadsudo 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 --classictar 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 18 # 安装自动补全 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 Artifact Hub
Bitnami Helm Charts
Microsoft
常用命令 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 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|carificate|...] kubectl get node --show-labels -o wide kubectl rollout restart {pod name} -n kubectl scale deploy whoami --replicas=5 kubectl cluster-info 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 25 26 27 28 29 kubectl create deploy whoami --image=traefik/whoami --replicas=2 kubectl describe deploy whoami kubectl get pods --watch kubectl scale deploy whoami --replicas=5 request public-ip -> node-port -> svc-port -> pod-port -> container 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
配置国内源(私有镜像库) K3s 默认的 containerd 配置文件目录为/var/lib/rancher/k3s/agent/etc/containerd/config.toml,但直接操作 containerd 的配置文件去设置镜像仓库或加速器相比于操作 docker 要复杂许多。K3s 为了简化配置 containerd 镜像仓库的复杂度,K3s 会在启动时检查/etc/rancher/k3s/中是否存在 registries.yaml 文件,如果存在该文件,就会根据 registries.yaml 的内容转换为 containerd 的配置并存储到/var/lib/rancher/k3s/agent/etc/containerd/config.toml,从而降低了配置 containerd 镜像仓库的复杂度。
K3s 镜像仓库配置文件由两大部分组成:mirrors 和 configs:
Mirrors 是一个用于定义专用镜像仓库的名称和 endpoint 的指令
Configs 部分定义了每个 mirror 的 TLS 和证书配置。对于每个 mirror,你可以定义 auth 和/或 tls
containerd 使用了类似 K8S 中 svc 与 endpoint 的概念,svc 可以理解为访问名称,这个名称会解析到对应的 endpoint 上。也可以理解 mirror 配置就是一个反向代理,它把客户端的请求代理到 endpoint 配置的后端镜像仓库。mirror 名称可以随意填写,但是必须符合 IP 或域名的定义规则。并且可以配置多个 endpoint,默认解析到第一个 endpoint,如果第一个 endpoint 没有返回数据,则自动切换到第二个 endpoint,以此类推。
1 2 3 4 5 6 7 8 9 10 11 12 mirrors: "172.31.6.200:5000": endpoint: - "http://172.31.6.200:5000" "rancher.ksd.top:5000": endpoint: - "http://172.31.6.200:5000" "docker.io": endpoint: - "https://fogjl973.mirror.aliyuncs.com" - "https://registry-1.docker.io"
非安全(http)私有仓库配置 配置非安全(http)私有仓库,只需要在 endpoint 中指定 http 协议头的地址即可。
在没有 TLS 通信的情况下,需要为 endpoints 指定 http://,否则将默认为 https。
无认证 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 证书 如果后端仓库使用的是自签名的 ssl 证书,那么需要配置 CA 证书 用于 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 双向认证 如果镜像仓库配置了双向认证,那么需要为 containerd 配置 ssl 证书用于 镜像仓库对 containerd 做认证。
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
加速器配置 Containerd 与 docker 都有默认仓库,均为 docker.io 。如果配置中未指定 mirror 为 docker.io,containerd 后会自动加载 docker.io 配置。与 docker 不同的是,containerd 可以修改 docker.io 对应的 endpoint(默认为 https://registry-1.docker.io ),而 docker 无法修改。
Docker 中可以通过 registry-mirrors 设置镜像加速地址。如果 pull 的镜像不带仓库地址(项目名+镜像名:tag),则会从默认镜像仓库去拉取镜像。如果配置了镜像加速地址,会先访问镜像加速仓库,如果没有返回数据,再访问默认的镜像仓库。
Containerd 目前没有直接配置镜像加速的功能,但 containerd 中可以修改 docker.io 对应的 endpoint,所以可以通过修改 endpoint 来实现镜像加速下载。因为 endpoint 是轮询访问,所以可以给 docker.io 配置多个仓库地址来实现 加速地址+默认仓库地址。如下配置示例:
1 2 3 4 5 mirrors: "docker.io": endpoint: - "https://fogjl973.mirror.aliyuncs.com" - "https://registry-1.docker.io"
参考
Kubernetes 入门到实践:搭建 K3s 集群初体验 - 知乎 (zhihu.com)
离线安装Air-Gap Install | K3s