参考:
用于本地实验的小型 Kubernetes:k0s、MicroK8s、kind、k3s 和 Minikube - 知乎
[K8S] 01 - MiniKube, K3S or MicroKube
被坑惨了, 安装了 k3s 本地 80 端口不能用了?-腾讯云开发者社区-腾讯云
k3s 的默认traefik服务不能被代理. 如何解决-高性能服务器开发
1、环境准备
yum install ntpdate -y
ntpdate time.windows.com
#默认安装使用containerd作为容器运行时
#如果没有安装过docker,需要装一下containerd
yum install containerd -y
systemctl start containerd && systemctl enable containerd
#如果提示找不到containerd包,可以尝试更换成阿里云镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#如果后续想用ipvs作为代理模型(默认的是iptables,ipvs的性能高一些)
yum install ipset ipvsadm -y
#确认所有节点的hostname唯一
hostname
#不唯一的话,修改hostname
hostnamectl set-hostname 新hostname
vim /etc/hosts
#修改hosts内容
127.0.0.1 新hostname
#禁用所有 woker 节点上的交换功能(Swap)
vim /etc/fstab
注释掉有swap字样的那行
#修改 sysctl 配置
vim /etc/sysctl.conf
添加一行
net.bridge.bridge-nf-call-iptables = 1
2、安装
#在master上执行
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.26.9+k3s1 INSTALL_K3S_EXEC=server sh -s -
#在node上执行
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.26.9+k3s1 INSTALL_K3S_EXEC=agent sh -s -
#默认安装使用containerd作为容器运行时,如果想使用docker作为容器运行时,按照下述操作。但一般建议忽略,因为containerd就是docker的后端容器组件,可以减少一层转发
#在上面命令后面加一个“--docker”,例如在master上安装
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.27.6-k3s1 INSTALL_K3S_EXEC=server sh -s - --docker
#验证安装成功
k3s kubectl get nodes
#为了方便调试和解决一些坑,我们采用手动启动方式,关闭k3s的服务
#在master上执行
systemctl stop k3s && systemctl disable k3s
#在node上执行
systemctl stop k3s-agent && systemctl disable k3s-agent
3、修改镜像源
docker pull coredns/coredns:1.11.1
docker tag coredns/coredns:1.11.1 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:1.11.1
cat > /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
docker.io:
endpoint:
- "http://registry.cn-hangzhou.aliyuncs.com/google_containers"
EOF
如果是用docker作为容器运行时的,也要修改docker的镜像源
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://xxxx.mirror.aliyuncs.com"
]
}
4、启动master并禁用traefik
#在master上启动
k3s server --disable traefik
或者编辑k3s的启动脚本
vim /etc/systemd/system/k3s.service
#在ExecStart的命令后面添加个参数,禁用traefik
ExecStart=/usr/local/bin/k3s \
server \
--docker \
--disable traefik \
systemctl start k3s
启用ipvs做代理(目前还没试验成功,@TODO)
#启动命令加个参数kube-proxy-arg
k3s server --disable traefik --kube-proxy-arg=proxy-mode=ipvs
5、在master上安装ingress-nginx
#安装
wget -O ingress-nginx.yaml https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/baremetal/deploy.yaml
sed -i "s/registry.k8s.io\/ingress-nginx\/controller:v1.6.4@sha256:15be4666c53052484dd2992efacf2f50ea77a78ae8aa21ccd91af6baaa7ea22f/woosau\/ingress-nginx-controller:v1.6.4/g" ingress-nginx.yaml
sed -i "s/registry.k8s.io\/ingress-nginx\/kube-webhook-certgen:v20220916-gd32f8c343@sha256:39c5b2e3310dc4264d638ad28d9d1d96c4cbb2b2dcfb52368fe4e3c63f61e10f/woosau\/ingress-nginx-kube-webhook-certgen:v20220916-gd32f8c343/g" ingress-nginx.yaml
kubectl create -f ingress-nginx.yaml
#验证安装结果
kubectl get pod,svc -n ingress-nginx
6、node加入集群
#在master上查看加入集群的token
cat /var/lib/rancher/k3s/server/node-token
#在node上启动并加入master的集群
k3s agent --server https://master的ip:6443 --token 集群的token
7、卸载k3s
#要从 Server(master) 节点卸载 K3s
sh /usr/local/bin/k3s-uninstall.sh
#要从 Agent(node) 节点卸载 K3
sh /usr/local/bin/k3s-agent-uninstall.sh