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

文档说明

本文档介绍在 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,修改deamon.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即可。