美文网首页
CentOS7下,RKE部署k8s集群,及Helm Chart

CentOS7下,RKE部署k8s集群,及Helm Chart

作者: 沉思的雨季 | 来源:发表于2022-10-27 19:50 被阅读0次

    本文将介绍,CentOS7系统下,通过RKE部署k8s集群,以及通过Helm3.6.3 CLI 在 Kubernetes1.20集群上部署cert-manager和Rancher2.6.3高可用系统。

    0. 前置条件

    系统版本:
    建议使用CentOS7.6,最低7.3以上版本;
    Docker版本:
    建议Kubernetes1.20,Kubernetes1.8不支持17.03更高版本的Docker;
    主机名:
    系统一定要修改主机名,确保各个hostname必须不同!
    主机文件:
    编辑/etc/hosts,要有·127.0.0.1 localhost·及所有主机节点的IP和名称列表。
    SELinux:
    必须关闭,修改配置文件/etc/sysconfig/selinux,设置SELINUX=disabled ,source立即生效。
    IPV4转发:
    必须开启,修改配置文件/etc/sysctl.conf,设置启用转发:
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    执行·sysctl -p·立刻生效。
    防火墙:
    关闭防火墙,执行·systemctl stop firewalld.service && systemctl disable firewalld.service·停止禁用。
    禁用SWAP:
    一定要禁用swap,否则kubelet组件无法运行,修改/etc/fstab文件,注释掉swap项。
    启用Cgroup:
    修改配置文件/etc/default/grub,启用cgroup内存限额功能,配置两个参数:
    GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
    GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
    执行·update-grub·更新grub,然后重启系统后生效。
    SSH免密登录:
    所有节点执行·ssh-keygen·生成秘钥,并通过命令·ssh-copy-id user@节点IP‘分发。

    1. RKE部署Kubernetes1.20集群

    准备centos7.6主机三台:kube0、kube1、kube2,配置最低为4核4G内存。

    [root@kube0 ~]# cat /etc/hosts
    192.168.65.129   kube0
    192.168.65.130   kube1
    192.168.65.131   kube2
    127.0.0.1   localhost localhost.localdomain
    

    安装docker,并配置镜像加速:参照CentOS7下安装Docker

    [root@kube0 ~]# docker -v
    Docker version 20.10.18, build b40c2f6
    

    安装RKE工具

    下载安装包(kube0上执行):

    [root@kube0 ~]# wget https://github.com/rancher/rke/releases/download/v1.2.8/rke_linux-amd64
    [root@kube0 ~]# mv rke_linux-amd64 /usr/local/bin/rke && chmod +x /usr/local/bin/rke
    

    创建用户(kube0、kube1、kube2上执行):

    [root@kube0 ~]# useradd vonechain
    [root@kube0 ~]# usermod -a -G docker vonechain
    

    部署Kubernetes1.20集群

    创建SSH秘密(kube0、kube1、kube2上执行):

    [root@kube0 ~]# su vonechain
    [vonechain@kube0 root]$ cd ~
    [vonechain@kube0 ~]$ ssh-keygen
    

    输入ssh-keygen按回车键到结束。

    分发秘钥到各节点(kube0、kube1、kube2上执行):

    [vonechain@kube0 ~]$ cd .ssh
    [vonechain@kube0 .ssh]$ ssh-copy-id  vonechain@192.168.65.130
    [vonechain@kube0 .ssh]$ ssh-copy-id  vonechain@192.168.65.131
    [vonechain@kube0 .ssh]$ ssh-copy-id  vonechain@192.168.65.129
    

    新建k8s.yml文件,编辑Kubernetes1.20集群配置:

    [vonechain@kube0 .ssh]$ cd ~
    [vonechain@kube0 ~]$ vim k8s.yml
    nodes:
      - address: 192.168.65.129
        internal_address: 192.168.65.129
        user: vonechain
        role: [controlplane,worker,etcd]
      - address: 192.168.65.130
        internal_address: 192.168.65.130
        user: vonechain
        role: [controlplane,worker,etcd]
      - address: 192.168.65.131
        internal_address: 192.168.65.131
        user: vonechain
        role: [controlplane,worker,etcd]
    
    kubernetes_version: "v1.20.6-rancher1-1"
    cluster_name: "quality-k8s"
    services:
        etcd:
          snapshot: true
          creation: 6h
          retention: 24h
    

    执行RKE命令,安装k8s集群(kube0上执行):

    [vonechain@kube0 ~]$ rke up --config ./k8s.yml
    

    运行该命令后,返回的最后一行信息应该是Finished building Kubernetes cluster successfully,表示成功部署集群。在k8s.yml同目录,会生成k8s.rkestate集群状态文件和kube_config_k8s.yml集群所有权限的认证凭据文件。

    设置k8s环境变量(kube0上执行):

    [vonechain@kube0 ~]$ echo "export KUBECONFIG=/root/kube_config_k8s.yml" >> .bashrc
    [vonechain@kube0 ~]$ source .bashrc
    

    安装Kubectl(kube0上执行):

    [vonechain@kube0 ~]$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    [vonechain@kube0 ~]$ setenforce 0
    [vonechain@kube0 ~]$ yum install -y kubectl
    

    检查k8s集群(kube0上执行):

    [vonechain@kube0 ~]$ kubectl get nodes
    NAME             STATUS   ROLES                      AGE     VERSION
    192.168.65.129   Ready    controlplane,etcd,worker   7h44m   v1.20.6
    192.168.65.130   Ready    controlplane,etcd,worker   7h45m   v1.20.6
    192.168.65.131   Ready    controlplane,etcd,worker   7h45m   v1.20.6
    

    Helm3安装Rancher2.6.3高可用

    添加 Helm Chart 仓库(kube0上执行):

    [vonechain@kube0 ~]$ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
    

    为 Rancher 创建命名空间(kube0上执行):

    [vonechain@kube0 ~]$ kubectl create namespace cattle-system
    

    安装 cert-manager(kube0上执行):

    # 安装 CustomResourceDefinition 资源
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
    # 添加 Jetstack Helm 仓库
    helm repo add jetstack https://charts.jetstack.io
    # 更新本地 Helm Chart 仓库缓存
    helm repo update
    # 安装 cert-manager Helm Chart
    helm install cert-manager jetstack/cert-manager \
      --namespace cert-manager \
      --create-namespace \
      --version v1.7.1
    

    检查 cert-manager正在运行的 Pod ,来验证它是否已正确部署(kube0上执行):

    [vonechain@kube0 ~]$ kubectl get pods --namespace cert-manager
    
    NAME                                       READY   STATUS    RESTARTS   AGE
    cert-manager-5c6866597-zw7kh               1/1     Running   0          2m
    cert-manager-cainjector-577f6d9fd7-tr77l   1/1     Running   0          2m
    cert-manager-webhook-787858fcdb-nlzsq      1/1     Running   0          2m
    

    Let's Encrypt证书安装 Rancher(kube0上执行):

    [vonechain@kube0 ~]$ helm install rancher rancher-stable/rancher \
      --namespace cattle-system \
      --set hostname=rancher.quality.icos \
      --set bootstrapPassword=admin \
      --set ingress.tls.source=letsEncrypt \
      --set letsEncrypt.email=test@qq.com \
      --set replicas=1 \
      --set letsEncrypt.ingress.class=nginx
    

    设置初始登录密码为admin,以单replicas运行rancher,若资源充足可设置为3。

    等待rancher安装完成,执行状态检查(kube0上执行):

    [vonechain@kube0 ~]$ kubectl -n cattle-system rollout status deploy/rancher
    Waiting for deployment "rancher" rollout to finish: 0 of 1 updated replicas are available...
    deployment "rancher" successfully rolled out
    

    输出deployment "rancher" successfully表示成功。
    配置Windows10本地hosts文件,添加dns解析192.168.65.129 rancher.quality.icos项.


    打开浏览器,通过:http://rancher.quality.icos访问rancher主页,登录密码为admin

    附:异常解决

    如果rancher安装完成,执行状态检查看到 error: deployment "rancher" exceeded its progress deadline 这个错误,可尝试重启pod来解决。

    [vonechain@kube0 ~]$ kubectl get pods -n cattle-system 
    NAME                               READY   STATUS    RESTARTS   AGE
    rancher-565c54d544-9vbtt           0/1     Running   6          166m
    [vonechain@kube0 ~]$ kubectl get pod rancher-565c54d544-9vbtt -n cattle-system -o yaml | kubectl replace --force -f -
    

    重启pod后,重新执行状态检查(kube0上执行):

    [vonechain@kube0 ~]$ kubectl -n cattle-system rollout status deploy/rancher
    Waiting for deployment "rancher" rollout to finish: 0 of 1 updated replicas are available...
    deployment "rancher" successfully rolled out
    

    相关文章

      网友评论

          本文标题:CentOS7下,RKE部署k8s集群,及Helm Chart

          本文链接:https://www.haomeiwen.com/subject/nzcttdtx.html