长期支持版本

    社区创新版本

      支持原生开发环境执行机集群部署指导

      文档说明

      本文档介绍在 openEuler 操作系统上,通过 kubeadm 部署 K8S 集群,搭建 K8S+iSulad 的环境,并在该环境上部署 gitlab-runner,通过执行流水线用例任务来进行验证测试的步骤。 本文档主要包括以下两部分的内容:

      1. K8s+iSulad 环境部署。
      2. gitlab runner 部署和测试。

      说明:本文档所有操作均使用root权限执行。

      K8s+iSulad环境部署

      准备集群服务器

      需准备至少3台openEuler机器,建议在openEuler-20.03及以上版本运行。下表为示例搭建机器信息。

      主机名IP系统版本角色组件
      lab1197.xxx.xxx.xxxopenEuler 20.03 LTS SP3控制节点iSulad/k8s
      lab2197.xxx.xxx.xxxopenEuler 20.03 LTS SP3工作节点1iSulad/k8s
      lab3197.xxx.xxx.xxxopenEuler 20.03 LTS SP3工作节点2iSulad/k8s

      镜像/软件信息

      安装过程中需要用到的软件及镜像名称如下表,版本号为示例安装时用到的版本,仅供参考。如果在无公网环境中搭建,需提前下载对应的软件包、相关依赖软件包及镜像。

      • 软件包下载地址:https://repo.openeuler.org/openEuler-22.03-LTS-SP1/
      • 镜像下载地址:dockerhub官网 https://hub.docker.com
      镜像/软件版本
      iSulad2.0.17-2
      kubernetes-client1.20.2-9
      kubernetes-kubeadm1.20.2-9
      kubernetes-kubelet1.20.2-9
      k8s.gcr.io/kube-proxyv1.20.2
      k8s.gcr.io/kube-apiserverv1.20.2
      k8s.gcr.io/kube-controller-managerv1.20.2
      k8s.gcr.io/kube-schedulerv1.20.2
      k8s.gcr.io/etcd3.4.13-0
      k8s.gcr.io/coredns1.7.0
      k8s.gcr.io/pause3.2
      calico/nodev3.14.2
      calico/pod2daemon-flexvolv3.14.2
      calico/cniv3.14.2
      calico/kube-controllersv3.14.2
      gitlab/gitlab-runneralpine-v14.4.0
      gitlab/gitlab-runner-helperx86_64-54944146

      修改host文件

      1. 修改主机名,以其中一台机器为例。

        # hostnamectl set-hostname lab1
        # sudo -i
        
      2. 配置主机名解析,编辑三台服务器的/etc/hosts文件。

        # vim /etc/hosts
        
      3. 在hosts文件中添加以下内容(IP+主机名)

        197.xxx.xxx.xxx lab1
        197.xxx.xxx.xxx lab2
        197.xxx.xxx.xxx lab3
        

      环境准备

      1. 关闭防火墙。

        # systemctl stop firewalld
        # systemctl disable firewalld
        
      2. 禁用selinux。

        # setenforce 0
        
      3. 关闭系统swap。

        # swapoff -a
        # sed -ri 's/.*swap.*/#&/' /etc/fstab
        
      4. 网络配置,开启相应的转发机制。

        # cat > /etc/sysctl.d/kubernetes.conf <<EOF
        net.bridge.bridge-nf-call-iptables = 1
        net.ipv4.ip_forward = 1
        net.bridge.bridge-nf-call-ip6tables = 1
        vm.swappiness=0
        EOF
        
      5. 生效规则。

        # modprobe overlay
        # modprobe br_netfilter
        # sysctl -p /etc/sysctl.d/kubernetes.conf
        
      6. 配置开机启动脚本。

        # vim /etc/init.d/k8s.sh
        
        • 在k8s.sh脚本中添加以下内容。

          #!/bin/sh
          modprobe br_netfilter
          sysctl -w net.bridge.bridge-nf-call-ip6tables = 1
          sysctl -w net.bridge.bridge-nf-call-iptables = 1
          
        • 改变脚本权限。

          # chmod +x /etc/init.d/k8s.sh
          
      7. 添加配置文件。

        # vim br_netfilte.service
        
        [Unit]
        Description=To enable the core module br_netfilter when reboot
        After=default.target
        [Service]
        ExecStart=/etc/init.d/k8s.sh //可以自定义
        [Install]
        WantedBy=default.target
        
        • 添加完成后启动服务。

          # systemctl daemon-reload
          # systemctl enable br_netfilter.service
          
      8. 配置sysctl。

        # sed -i "s/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/g" /etc/sysctl.conf
        # sed -i 12a\vm.swappiness=0 /etc/sysctl.conf
        

      安装kubeadm、kubectl、kubelet组件及iSulad

      1. 使用yum install安装软件包。
      # yum install -y kubernetes-kubeadm
      # yum install -y kubernetes-client
      # yum install -y kubernetes-kubelet
      # yum install -y iSulad
      
      1. 设置kubelet开机启动。
      # systemctl enable kubelet
      

      修改isulad配置

      1. 进入/etc/isulad,修改daemon.json文件。
      # vi /etc/isulad/daemon.json
      
      1. 修改并添加配置文件中的内容。
      {
        "group": "isula",
        "default-runtime": "lcr",
        "graph": "/var/lib/isulad",
        "state": "/var/run/isulad",
        "engine": "lcr",
        "log-level": "ERROR",
        "pidfile": "/var/run/isulad.pid",
        "log-opts": {
            "log-file-mode": "0600",
            "log-path": "/var/lib/isulad",
            "max-file": "1",
            "max-size": "30KB"
        },
        "log-driver": "stdout",
        "container-log": {
            "driver": "json-file"
        },
        "hook-spec": "/etc/default/isulad/hooks/default.json",
        "start-timeout": "2m",
        "storage-driver": "overlay2",
        "storage-opts": [
            "overlay2.override_kernel_check=true"
        ],
        "registry-mirrors": [
                    "docker.io"
        ],
        "insecure-registries": [
                     "k8s.gcr.io",
                     "quay.io",
                     "oci.inhuawei.com",
                     "rnd-dockerhub.huawei.com",
                     "registry.aliyuncs.com",
                     "【本地私有镜像仓IP】"
        ],
        "pod-sandbox-image": "k8s.gcr.io/pause:3.2",
        "native.umask": "normal",
        "network-plugin": "cni",
        "cni-bin-dir": "/opt/cni/bin",
        "cni-conf-dir": "/etc/cni/net.d",
        "image-layer-check": false,
        "use-decrypted-key": true,
        "insecure-skip-verify-enforce": false,
        "cri-runtimes": {
            "kata": "io.containerd.kata.v2"
        }
      }
      
      1. 重启isulad服务。
      # systemctl restart isulad
      

      加载isulad镜像

      1. 查看需要的系统镜像。

        # kubeadm config images list
        

      注意对应的版本号,输出结果如图所示。

      1. 使用isula拉取所需镜像。

        说明 : 以下所下载的镜像版本均为示例,具体版本号以上条命令返回结果为准,下同。

        # isula pull k8simage/kube-apiserver:v1.20.15
        # isula pull k8smx/kube-controller-manager:v1.20.15
        # isula pull k8smx/kube-scheduler:v1.20.15
        # isula pull k8smx/kube-proxy:v1.20.15
        # isula pull k8smx/pause:3.2
        # isula pull k8smx/coredns:1.7.0
        # isula pull k8smx/etcd:3.4.13-0
        
      2. 修改已下载的镜像标签。

        # isula tag k8simage/kube-apiserver:v1.20.15 k8s.gcr.io/kube-apiserver:v1.20.15
        # isula tag k8smx/kube-controller-manager:v1.20.15 k8s.gcr.io/kube-controller-manager:v1.20.15
        # isula tag k8smx/kube-scheduler:v1.20.15 k8s.gcr.io/kube-scheduler:v1.20.15
        # isula tag k8smx/kube-proxy:v1.20.15 k8s.gcr.io/kube-proxy:v1.20.15
        # isula tag k8smx/pause:3.2 k8s.gcr.io/pause:3.2
        # isula tag k8smx/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
        # isula tag k8smx/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
        
      3. 删除旧镜像。

        # isula rmi k8simage/kube-apiserver:v1.20.15
        # isula rmi k8smx/kube-controller-manager:v1.20.15
        # isula rmi k8smx/kube-scheduler:v1.20.15
        # isula rmi k8smx/kube-proxy:v1.20.15
        # isula rmi k8smx/pause:3.2
        # isula rmi k8smx/coredns:1.7.0
        # isula rmi k8smx/etcd:3.4.13-0
        
      4. 查看已拉取的镜像。

        # isula images
        

      安装crictl工具

      # yum install -y cri-tools
      

      初始化master节点

      执行如下命令初始化master节点:

      # kubeadm init --kubernetes-version v1.20.2 --cri-socket=/var/run/isulad.sock --pod-network-cidr=[指定pod分配IP段]
      
      //以上参数的解释
      kubernetes-version 为当前安装的版本
      cri-socket 指定引擎为isulad
      pod-network-cidr 指定pod分配的ip段
      

      根据系统提示输入如下命令:

      # mkdir -p $HOME/.kube
      # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      # sudo chown $(id -u):$(id -g) $HOME/.kube/config
      

      初始化成功后,复制最后两行内容,在node节点上执行刚刚复制的命令,将节点加入master集群,如未记录上述命令可通过如下命令生成:

      # kubeadm token create --print-join-command
      

      node节点添加进集群

      粘贴master上初始化生成的kubeadm join ...命令,并在discovery前添加--cri-socket=/var/run/isulad.sock,执行如下命令:

      # kubeadm join [IP地址] --token bgyis4.euwkjqb7jwuenwvs --cri-socket=/var/run/isulad.sock --discovery-token-ca-cert-hash sha256:3792f02e136042e2091b245ac71c1b9cdcb97990311f9300e91e1c339e1dfcf6
      

      安装calico网络插件

      1. 拉取calico镜像。

        需要在master节点配置calico网络插件,同时需要在每个节点中提前拉取需要版本的镜像。

        isula pull calico/node:v3.14.2
        isula pull calico/cni:v3.14.2
        isula pull calico/kube-controllers:v3.14.2
        isula pull calico/pod2daemon-flexvol:v3.14.2
        
      2. 在master节点上获取配置文件。

        wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml
        
      3. 修改calico.yaml文件。

        # vim calico.yaml
        
        //修改以下两个参数
        
        - name: IP_AUTODERECTION_METHOD
        Value: ”can-reach=197.3.10.254”
        
        - name: CALICO_IPV4POOL_IPIP
        Value: ”CrossSubnet”
        

        • 若POD默认CNI为flannel,在flannel.yaml中添加以下内容,详见下图:

          --iface=enp4s0
          

      4. 修改后创建pod。

        # kubectl apply -f calico.yaml
        
        • 如需删除使用如下命令:

          # kubectl delete -f calico.yaml
          
      5. 查看pod信息。

        # kubectl get pod -A -o wide
        

      查看master节点node信息

      使用如下命令可查看节点的详细信息:

      # kubectl get nodes -o wide
      

      若需要重置node节点,可使用如下命令:

      # kubeadm reset
      

      gitlab runner部署及测试

      gitlab部署

      将需要的yaml文件拷贝至/home目录,并启动对应的pod。

      说明:gitlab相关的yaml文件可从官网获得,请选择需要的对应版本下载。

      # kubectl apply -f gitlab-redis.yaml
      # kubectl apply -f gitlab-postgresql.yaml
      # kubectl apply -f gitlab.yaml
      

      可通过命令查看gitlab pod是否搭建完成。

      # kubectl get pod -A -owide
      

      查看是否可以登录gitlab网页,网址为ip地址加设定的端口。

      网页入口 用户名为root,默认密码需进入容器后查看密码文件。

      # kubectl exec -it gitlab-lab -n default /bin/sh
      # cat /etc/gitlab/initial_root_password
      

      查询密码

      • 登录后界面如图:

      登录后页面

      使用gitlab-runner.yaml启动runner容器

      修改gitlab-runner.yaml文件,修改文件中的镜像名。

      # vim gitlab-runner.yaml
      # kubectl apply -f gitlab-runner.yaml
      # kubectl get pod -A -o wide
      

      镜像

      登录gitlab容器网页-用户证书认证

      1. 新建项目。

        新建项目

      2. 创建空白项目。

        创建空白项目

      3. 自定义项目名称。

        自定义项目名称

      4. 设置--CI/CD--Runner--展开。

        设置-cicd-runner

      5. 记录注册Runner的地址和令牌。

        记下runner地址与令牌

      6. 导入证书文件。

        在master节点上查看并生成证书文件,共三个文件admin.crt、admin.key、ca.crt。

        • 查看证书信息

          # cat /etc/kubernetes/admin.conf
          

          查看证书配置文件

        • 加密生成admin.crt

          # echo “${client-certificate-data}” | base64 -d > admin.crt
          
        • 加密生成admin.key

          # echo “${client-key-data}” | base64 -d > admin.key
          
        • 在manager节点上获取ca的证书

          # cp /etc/kubernetes/pki/ca.crt ./
          
      7. 在runner运行的节点处将三个证书文件导入gitlab-runner容器。

        说明 :导入容器需查看gitlab-runner运行在哪个节点上,将三个证书文件拷贝至该节点,然后使用isula cp命令导入。

        # isula cp admin.crt [容器id]:存放位置
        # isula cp admin.key [容器id]:存放位置
        # isula cp ca.crt [容器id]:存放位置
        

        注:isula cp 命令只能一次拷贝一个文件

        证书导入文件

      注册gitlab-runner

      进入到runner的容器内进行注册;目前采用交互式注册,注册信息在gitlab上获得,当前配置的 runner服务于项目组,此信息的界面在gitlab->项目组(group)->设置->CI/CD->runner中查看。

      注册gitlab-runner

      web端已加入

      将准备好的gitlab-runner-helper镜像提前上传至私有镜像仓,进入gitlab-runner容器中,修改配置文件。

      # cd /etc/gitlab-runner
      # mkdir kubessl
      # cp /home/admin.crt /etc/gitlab-runner/kubessl
      # cp /home/ca.crt /etc/gitlab-runner/kubessl
      # cp /home/admin.key /etc/gitlab-runner/kubessl
      # vim /etc/gitlab-runner/config.toml
      

      在manager节点进行如下操作添加gitlab容器的dns记录

      1. 查看gitlab容器的ip地址

        # kubectl get pods –Aowide
        
      2. 添加gitlabip地址到k8s dns配置文件

        # kubectl edit configmaps coredns -n kube-system
        

      dns

      1. 重启coredns服务

        # kubectl scale deployment coredns -n kube-system --replicas=0
        # kubectl scale deployment coredns -n kube-system --replicas=2
        

      gitlab运行测试

      返回gitlab的web界面,选择CI/CD--编辑器--创建新的CI/CD流水线。

      CICD界面

      • 编译yaml文件如下:

      yaml文件

      • 流水线-查看状态。

      流水线状态

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份