k3s+rancher部署测试环境

默认分类 · 2023-07-12

需要部署一套特定版本的k3s和rancher做测试,做下笔记
节点全都是CentOS7


安装Docker

  1. 添加阿里docker-ce源

    curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo \
     > /etc/yum.repos.d/docker-ce.repo
  2. 更新yum源

    yum clean all
    yum makecache
  3. 安装docker-ce

    yum -y install docker-ce-19.03.13-3.el7
  4. 配置docker镜像源

    mkdir /etc/docker
    cat > /etc/docker/daemon.json << EOF
    {
      "registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn"]
    }
    EOF
  5. 启动docker,设置自启

    systemctl daemon-reload
    systemctl start docker.service
    systemctl enable docker.service

安装k3s

  1. 下载k3s的安装脚本

    curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh > ./get-k3s.sh
    chmod +x ./get-k3s.sh
  2. 执行安装脚本

    cat ./get-k3s.sh | \
     INSTALL_K3S_VERSION=v1.21.14+k3s1 \
     INSTALL_K3S_MIRROR=cn \
     sh -s - server --docker
  3. 查看集群状态

    [root@rancher ~]# kubectl get pods -A
    NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
    kube-system   helm-install-traefik-crd-w9vgm            0/1     Completed   0          5h53m
    kube-system   local-path-provisioner-84bb864455-ksl6d   1/1     Running     1          5h53m
    ...
    
    [root@rancher ~]# docker ps -a
    CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS     NAMES
    b3f66d6658e6   746788bcc27e                 "entry"                  10 minutes ago   Up 10 minutes             k8s_lb-port-443_svclb-traefik-dhxnx_kube-system_c3329683-b15d-43f0-abc3-d3da846aaa44_1
    9d2ac74ebfb6   746788bcc27e                 "entry"                  10 minutes ago   Up 10 minutes             k8s_lb-port-80_svclb-traefik-dhxnx_kube-system_c3329683-b15d-43f0-abc3-d3da846aaa44_1
    ...

    如果这里kubectl看到pod,而docker看不到容器,则说明k3s的安装有问题,cri调用containerd而不是docker了,需要检查第二步的脚本最后的参数是否正确,并重新安装


安装helm

  1. 下载helm二进制文件,解压并移动到bin目录

    wget https://get.helm.sh/helm-v3.12.1-linux-amd64.tar.gz
    tar -xvf ./helm-v3.12.1-linux-amd64.tar.gz
    cp ./linux-amd64/helm /usr/bin/
  2. 添加环境变量

    cat >> /etc/profile << EOF
    export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
    EOF
    source /etc/profile
  3. 查看helm状态

    [root@rancher ~]# helm list -A
    NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
    traefik         kube-system     1               2023-07-12 00:42:20.545370487 +0000 UTC deployed        traefik-10.14.100       2.6.0
    traefik-crd     kube-system     1               2023-07-12 00:42:04.022287234 +0000 UTC deployed        traefik-crd-10.14.100

通过helm部署rancher

  1. 添加helm镜像源

    helm repo add rancher-stable https://rancher-mirror.rancher.cn/server-charts/stable
  2. 创建命名空间

    kubectl create namespace cattle-system
  3. 安装cert-manager

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
  4. 安装rancher

    helm install rancher rancher-stable/rancher \
      --namespace cattle-system \
      --set hostname=rancher.local \
      --set replicas=1 \
      --version 2.5.15
  5. rancher初始化
    等待rancher的pod全都起来,通过上一步设置的域名登录rancher控制台,没有域名改本地的hosts文件也行,local域名有限制不能直接保存,浏览器f12用开发者工具把按钮的disable去掉就可以保存了

创建新的k3s集群

环境要求rancher所在集群独立于其他集群,故需要创建另一套专门的k3s集群,并接入到rancher中管理
先给一个节点参照上面的流程安装k3s,作为新集群的master

  1. 给节点的hosts添加域名,因为用的是本地域名,需要在新节点加一下

    cat >> /etc/hosts << EOF
    192.168.50.231 rancher.local
    EOF
  2. 修改coredns的配置文件
    因为节点的hosts文件在k3s集群内不生效,导致容器无法访问到rancher.local,需要修改集群coredns的配置文件来实现本地域名解析

    kubectl edit -n kube-system configmaps coredns
    apiVersion: v1
    data:
      Corefile: |
     .:53 {
         ...
     }
      NodeHosts: |
     0.0.0.0 master01
     <ip to rancher> rancher.local

    加上域名后重启一下coredns

    kubectl delete -n kube-system pods coredns-<id> --force --grace-period 0
  3. 到rancher中添加集群,获取命令并执行

    kubectl apply -f https://rancher.local/v3/import/<id>.yaml

    这里记一个大坑,k3s对证书的处理应该是有问题的,会导致Rancher接入新集群时出现x509证书问题,参考这个 链接
    链接里老哥解决方法也很粗暴,直接重装Rancher且不安装cert-manager
    我直接重装了,cert-manage也还是装了,好了
    重装解决一切问题,如果没有,那就再装一遍🤡


添加Worker节点到k3s集群中

  1. 获取集群的Token
    在master节点上执行以下命令获取Token

    cat /var/lib/rancher/k3s/server/node-token
  2. 按之前写的下载k3s安装脚本,填入Master ip和Token并执行

    cat ./get-k3s.sh | \
     INSTALL_K3S_VERSION=v1.21.14+k3s1 \
     INSTALL_K3S_MIRROR=cn \
     K3S_URL=https://<Master Node IP>:6443 \ 
     K3S_TOKEN=<token> \
     sh -s - --docker
  3. 查看节点加入状态

    [root@master01 ~]# kubectl get nodes
    NAME       STATUS   ROLES                  AGE   VERSION
    master01   Ready    control-plane,master   68m   v1.21.14+k3s1
    worker01   Ready    <none>                 14s   v1.21.14+k3s1
Theme Jasmine by Kent Liao