安装基础
本文基于虚拟化CentOS7与内网测试环境。官方也有完整的运行脚本与文档。开贴仅为记录部署过程留档与未来功能扩展升级的文档基石。
1. 防火墙设置
首先应按照部署环境考虑端口组开放情况,对于完全内网环境可以直接关闭防火墙避免端口忘记开放倒是无法连通(同时也是官方推荐的做法)
systemctl disable firewalld --now
或者开放6443端口与其他必要端口
firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --add-port=6443/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --query-port=6443/tcp
TCP 6443 K3s agent 节点 Kubernetes API Server UDP 8472 K3s server 和 agent 节点 仅对 Flannel VXLAN 需要 UDP 51820 K3s server 和 agent 节点 只有 Flannel Wireguard 后端需要 UDP 51821 K3s server 和 agent 节点 使用 IPv6 的 Flannel Wireguard 后端需要 TCP 10250 K3s server 和 agent 节点 Kubelet metrics TCP 2379-2380 K3s server 节点 只有嵌入式 etcd 高可用才需要
2. (可选)换用Docker作为容器组件
按照Docker官方文档部署Docker并换用国内镜像源
sudo yum remove docker docker-common docker-selinux docker-engine
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 wget
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
sudo yum makecache fast
sudo yum install -y docker-ce
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
sudo docker --version
将写入安装配置信息到/etc/rancher/k3s/config.yaml
文件或使用安装参数接入docker,使用方法参考官方文档:文档链接
单点安装
单点部署属于最简单的一种安装方式
1. K3S server节点(master)安装
个人建议使用在安装配置文件中写入安装参数的方式定制化安装K3S,在完成配置文件的编辑后运行
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
cat /var/lib/rancher/k3s/server/node-token # 获取随机生成的TOKEN
2. K3S agent节点(worker)安装
在worker节点的安装时,需要确定master接入点,即一个指向master的IP、域名或者四层均衡负载(L4 switch),worker会一直用过这个固定的接入点与master联系,如果master(单点或集群)的接入点发生变化,worker节点就会丢失主节点,可手动恢复,但是比较麻烦。
K3S_TOKEN=K1099ade7338...c36f33de39::server:76186cb47adedb6e87324e0fc6ffce2a
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://10.10.1.51:6443 K3S_TOKEN=${K3S_TOKEN} sh -
3. K3S 镜像下载加速(添加镜像源)
K3S默认使用containerd作为容器运行时,为了避免直接从海外镜像源中下载容器镜像,需要修改k3s的运行配置。并且需要在所有节点都进行修改并重启k3s服务。
在路径/var/lib/rancher/k3s/agent/etc/containerd
下,将config.toml
复制为config.toml.tmpl
并添加以下内容到文件结尾。
至于为什么要复制,而不是修改,可以在官方文档中找到。网页链接
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://docker.mirrors.ustc.edu.cn"]
在所有节点上修改后,重启K3S服务以生效
4. 重启K3S服务
重启server节点(master):systemctl restart k3s
重启agent节点(worker):systemctl restart k3s-agent
中断服务:/usr/local/bin/k3s-killall.sh
服务卸载:/usr/local/bin/k3s-uninstall.sh
5. 修正work标签
worker节点在安装完成并上线运行后,通过kubectl get nodes
查看时,worker节点的ROLES列为none。该问题不是特别影响使用,但是如果需要修复这个问题,可执行以下内容(注意替换节点名称)
kubectl label node ${node_name} node-role.kubernetes.io/worker=worker
修改后效果
[root@k3s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3s-worker1 Ready worker 41h v1.23.8+k3s2
k3s-worker2 Ready worker 41h v1.23.8+k3s2
k3s-master Ready control-plane,master 41h v1.23.8+k3s2
6. 基本信息
在安装完成后会输出以下信息(安装留档)
kubectl cluster-info
输出的默认信息
Kubernetes control plane is running at https://127.0.0.1:6443
CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy
kubectl get pod,svc -n kube-system
输出的默认信息
NAME READY STATUS RESTARTS AGE
pod/coredns-d76bd69b-pzrxw 1/1 Running 0 16h
pod/local-path-provisioner-6c79684f77-5zt97 1/1 Running 0 16h
pod/helm-install-traefik-crd-t296j 0/1 Completed 0 16h
pod/helm-install-traefik-4cgcm 0/1 Completed 1 16h
pod/svclb-traefik-4a9a12c2-tz829 2/2 Running 0 16h
pod/metrics-server-7cd5fcb6b7-77qzl 1/1 Running 0 16h
pod/traefik-df4ff85d6-vv8dt 1/1 Running 0 16h
pod/svclb-traefik-4a9a12c2-4n2rv 2/2 Running 0 16h
pod/svclb-traefik-4a9a12c2-qbsx2 2/2 Running 0 16h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 16h
service/metrics-server ClusterIP 10.43.128.159 <none> 443/TCP 16h
service/traefik LoadBalancer 10.43.206.158 10.10.1.51,10.10.1.56,10.10.1.57 80:30393/TCP,443:31186/TCP 16h