长期支持版本

    社区创新版本

      K8S 迁移至 openEuler 指导

      软件介绍

      Kubernetes 集群(以下简称 K8S)是一个开源的容器集群管理平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。Kubernetes的目标是促进完善组件和工具的生态系统,以减轻应用程序在云上运行的负担。

      Kubernetes 集群中存在两种节点,Master 节点和 Worker 节点。Master 节点是集群的控制节点,负责整个集群的管理和控制。针对集群执行的控制命令都是发送给 Master 节点的。Worker 节点是 Kubernetes 集群中的工作负载节点,Worker 上的工作负载由 Master 分配,当某个 Worker 宕机时,Master 会将上面的工作负载转移到其他节点上去。

      本文描述使用两个节点来搭建 Kubernetes 集群的方法,一个作为 Master 节点,另一个作为 Worker 节点。

      环境配置

      软件平台

      软件名称版本号安装方法
      openEuler20.03-LTS-SP1iso
      gnu7.3.0yum install
      python33.7.4yum install
      bash5.0.11yum install

      必要依赖包

      软件名称版本号安装方法
      docker-engine18.09.0-101见安装docker配置yum源
      kubelet1.15.10/1.18/1.16见安装k8s组件
      kubeadm1.15.10/1.18/1.16见安装k8s组件
      kubectl1.15.10/1.18/1.16见安装k8s组件
      kubernetes-cni1.15.10/1.18/1.16见安装k8s组件

      说明: 本文适用于 K8S 1.15.10/1.18/1.16 三个版本,本文以 1.15.10 版本为例说明。

      系统配置

      修改主机配置

      分别编辑 Master 和 Worker 节点的/etc/hosts 文件,在文件末尾添加 Master 和 Worker 节点的IP。

      192.168.122.72 master
      192.168.122.130 worker 
      

      安装 docker 配置 yum 源

      1. 可选,官方发布的镜像中已配置好 yum 源,不需要另外配置。如系统中没有配置任何 openEuler yum 源,则需要按照如下操作新增 repo 文件,baseurl值以发布版本中的源地址为准。
      • aarch64架构

        $ vim /etc/yum.repos.d/openEuler_aarch64.repo
        

      • x86架构

        $ vim /etc/yum.repos.d/openEuler_x86_64.repo
        

      1. 分别在 Master 和 Worker 节点上执行。 清除缓存中的软件包及旧的headers,重新建立缓存。

        $ yum clean all
        $ yum makecache
        
      2. 安装docker并启动相关服务,输出docker的状态。

        $ yum -y install docker-engine
        $ systemctl daemon-reload
        $ systemctl status docker
        $ systemctl restart docker
        $ systemctl status docker
        $ systemctl enable docker
        

      关闭防火墙和selinux

      由于 nftables 后端兼容性问题,产生了重复的防火墙规则,需要关闭防火墙;为了使容器可以访问宿主机的文件系统,需要关闭 selinux。

      分别在 Master 和 Worker 节点上执行如下命令,关闭防火墙和 selinux。

      $ systemctl stop firewalld
      $ systemctl disable firewalld
      $ setenforce 0
      $ sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
      

      配置 kubernetes yum 源

      1. 分别在 Master 和 Worker 节点上执行如下命令,配置 kubernetes 的 yum 源。

        • aarch64架构
        cat <<EOF > /etc/yum.repos.d/kubernetes.repo
        
        [kubernetes]
        name=Kubernetes
        baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
        enabled=1
        gpgcheck=1
        repo_gpgcheck=1
        gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
              http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
        EOF
        
        • x86架构:
        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=1
        repo_gpgcheck=1
        gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        	  http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
        EOF
        
      2. 配置完成后,执行如下命令,清除缓存中的软件包及旧的 headers,重新建立缓存。

        $ yum clean all
        $ yum makecache
        

      关闭交换分区

      在安装 K8S 集群时,Linux 的 Swap 内存交换机制需要关闭,否则会因为内存交换影响系统的性能和稳定性。

      1. 分别在 Master 和 Worker 节点上执行如下命令,关闭交换分区。

        $ swapoff -a
        $ cp -p /etc/fstab /etc/fstab.bak$(date '+%Y%m%d%H%M%S')
        $ sed -i "s/\/dev\/mapper\/openeuler-swap/\#\/dev\/mapper\/openeuler-swap/g" /etc/fstab
        
      2. 执行如下命令查看是否修改成功。

        $ cat /etc/fstab
        

      3. 执行如下命令重启系统。

        $ reboot
        

      软件安装

      安装k8s组件

      分别在 Master 和 Worker 节点上执行如下命令,安装 k8s 组件。

      $ yum install -y kubelet-1.15.10 kubeadm-1.15.10 kubectl-1.15.10 kubernetes-cni-0.7.5
      

      配置开机启动项

      1. 分别在 Master 和 Worker 节点上执行如下命令,配置开机启动 kubelet。

        $ systemctl enable kubelet
        
      2. 分别在 Master 和 Worker 节点上创建 /etc/sysctl.d/k8s.conf 文件,并添加如下内容。

        net.bridge.bridge-nf-call-ip6tables = 1
        net.bridge.bridge-nf-call-iptables = 1
        net.ipv4.ip_forward = 1
        vm.swappiness=0
        
      3. 分别在 Master 和 Worker 节点上执行如下命令,使修改生效。

        $ modprobe br_netfilter
        $ sysctl -p /etc/sysctl.d/k8s.conf
        

      通过Docker下载组件

      Master 和 Worker 节点通过 Docker 下载其他组件,下载镜像时需要根据架构选择相应的版本,以下命令分别两台节点上执行,操作步骤如下。

      1. 查看初始化所需镜像,执行如下命令,结果如图所示。

        $ kubeadm config images list
        

        说明:
        K8S所需镜像版本有可能会变动,故需查看列表匹配需要下载的Docker镜像,以下镜像版本仅供参考。

      2. 执行如下命令,从 DockerHub 上下载镜像。

        • aarch64架构
        $ docker pull gcmirrors/kube-apiserver-arm64:v1.15.10
        $ docker pull gcmirrors/kube-controller-manager-arm64:v1.15.10
        $ docker pull gcmirrors/kube-scheduler-arm64:v1.15.10
        $ docker pull gcmirrors/kube-proxy-arm64:v1.15.10
        $ docker pull gcmirrors/pause-arm64:3.1
        $ docker pull gcmirrors/etcd-arm64:3.3.10
        $ docker pull coredns/coredns:1.3.1
        $ docker pull gcmirrors/coredns:1.3.1
        
        • x86架构
        $ docker pull gcmirrors/kube-apiserver-amd64:v1.15.10
        $ docker pull gcmirrors/kube-controller-manager-amd64:v1.15.10
        $ docker pull gcmirrors/kube-scheduler-amd64:v1.15.10
        $ docker pull gcmirrors/kube-proxy-amd64:v1.15.10
        $ docker pull gcmirrors/pause-amd64:3.1
        $ docker pull gcmirrors/etcd-amd64:3.3.10
        $ docker pull coredns/coredns:1.3.1
        $ docker pull gcmirrors/coredns:1.3.1
        

        说明:
        如果配置了docker镜像库代理,可以直接将标签换为“k8s.gcr.io”并省略以下步骤。

      3. 执行如下命令,给已下载的镜像打标签。

        • aarch64架构
        $ docker tag gcmirrors/kube-apiserver-arm64:v1.15.10 k8s.gcr.io/kube-apiserver:v1.15.10
        $ docker tag gcmirrors/kube-controller-manager-arm64:v1.15.10 k8s.gcr.io/kube-controller-manager:v1.15.10
        $ docker tag gcmirrors/kube-scheduler-arm64:v1.15.10 k8s.gcr.io/kube-scheduler:v1.15.10
        $ docker tag gcmirrors/kube-proxy-arm64:v1.15.10 k8s.gcr.io/kube-proxy:v1.15.10
        $ docker tag gcmirrors/pause-arm64:3.1 k8s.gcr.io/pause:3.1
        $ docker tag gcmirrors/etcd-arm64:3.3.10 k8s.gcr.io/etcd:3.3.10
        $ docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
        
        • x86架构
        $ docker tag gcmirrors/kube-apiserver-amd64:v1.15.10 k8s.gcr.io/kube-apiserver:v1.15.10
        $ docker tag gcmirrors/kube-controller-manager-amd64:v1.15.10 k8s.gcr.io/kube-controller-manager:v1.15.10
        $ docker tag gcmirrors/kube-scheduler-amd64:v1.15.10 k8s.gcr.io/kube-scheduler:v1.15.10
        $ docker tag gcmirrors/kube-proxy-amd64:v1.15.10 k8s.gcr.io/kube-proxy:v1.15.10
        $ docker tag gcmirrors/pause-amd64:3.1 k8s.gcr.io/pause:3.1
        $ docker tag gcmirrors/etcd-amd64:3.3.10 k8s.gcr.io/etcd:3.3.10
        $ docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
        

        说明:
        可以不对镜像打tag,在后续使用kubeadm init进行初始化时,使用--image-repository=gcmirrors命令行参数指定镜像仓库为gcmirrors。此时,第5步的删除镜像操作不需执行。

      4. 执行如下命令,查看上步中的镜像是否成功打上 k8s 标签,查询结果如下图所示:

        $ docker images | grep k8s
        

      5. 标签打好后,执行如下命令,删除当前环境上的旧镜像。

        • aarch64架构
        $ docker rmi gcmirrors/kube-apiserver-arm64:v1.15.10
        $ docker rmi gcmirrors/kube-controller-manager-arm64:v1.15.10
        $ docker rmi gcmirrors/kube-scheduler-arm64:v1.15.10
        $ docker rmi gcmirrors/kube-proxy-arm64:v1.15.10
        $ docker rmi gcmirrors/pause-arm64:3.1
        $ docker rmi gcmirrors/etcd-arm64:3.3.10
        $ docker rmi coredns/coredns:1.3.1  
        
        • x86架构
        $ docker rmi gcmirrors/kube-apiserver-amd64:v1.15.10
        $ docker rmi gcmirrors/kube-controller-manager-amd64:v1.15.10
        $ docker rmi gcmirrors/kube-scheduler-amd64:v1.15.10
        $ docker rmi gcmirrors/kube-proxy-amd64:v1.15.10
        $ docker rmi gcmirrors/pause-amd64:3.1
        $ docker rmi gcmirrors/etcd-amd64:3.3.10
        $ docker rmi coredns/coredns:1.3.1
        

      配置 Master 节点

      1. 在 Master 节点上执行如下命令,进行集群初始化。

        $ systemctl daemon-reload
        $ systemctl restart kubelet
        $ kubeadm init --kubernetes-version v1.15.10 --pod-network-cidr=10.244.0.0/16 --image-repository=gcmirrors
        

        集群初始化成功后,界面显示信息如下。

        保存上图中的kubeadm join命令,在下文Worker节点加入集群步骤中需要执行该命令。

        说明: 使用 kubeadm 安装的 Kubernetes 会自动生成集群所需的证书。所有证书都存放在 /etc/kubernetes/pki 目录下。

      2. 按照初始化成功的控制台显示信息配置集群,命令如下所示。

        $ mkdir -p $HOME/.kube
        $ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
        $ chown $(id -u):$(id -g) $HOME/.kube/config  
        
      3. 在Master节点执行如下命令,查看集群节点信息。

        $ kubectl get node 
        

        由于还没有配置calico网络,当前node状态为未就绪。

      安装calico网络插件

      1. 分别在 Master 和 Worker 节点上执行如下命令,下载 calico 容器镜像。

        • aarch64架构
        $ docker pull calico/cni:v3.14.2-arm64
        $ docker pull calico/node:v3.14.2-arm64
        $ docker pull calico/kube-controllers:v3.14.2-arm64
        $ docker pull calico/pod2daemon-flexvol:v3.14.2-arm64
        
        • x86架构
        $ docker pull calico/cni:v3.14.2-amd64
        $ docker pull calico/node:v3.14.2-amd64
        $ docker pull calico/kube-controllers:v3.14.2-amd64
        $ docker pull calico/pod2daemon-flexvol:v3.14.2-amd64
        
      2. 分别在 Master 和 Worker 节点上执行如下命令,修改已下载的镜像标签。

        • aarch64架构
        $ docker tag calico/cni:v3.14.2-arm64 calico/cni:v3.14.2
        $ docker tag calico/node:v3.14.2-arm64 calico/node:v3.14.2
        $ docker tag calico/kube-controllers:v3.14.2-arm64 calico/kube-controllers:v3.14.2
        $ docker tag calico/pod2daemon-flexvol:v3.14.2-arm64 calico/pod2daemon-flexvol:v3.14.2
        
        • x86架构
        $ docker tag calico/cni:v3.14.2-amd64 calico/cni:v3.14.2
        $ docker tag calico/node:v3.14.2-amd64 calico/node:v3.14.2
        $ docker tag calico/kube-controllers:v3.14.2-amd64 calico/kube-controllers:v3.14.2
        $ docker tag calico/pod2daemon-flexvol:v3.14.2-amd64 calico/pod2daemon-flexvol:v3.14.2
        
      3. 执行如下命令,查看是否成功打上 calico 标签。

        $ docker images | grep calico
        

      4. 分别在 Master 和 Worker 节点上执行如下命令,删除旧镜像。

        • aarch64架构
        $ docker rmi calico/cni:v3.14.2-arm64
        $ docker rmi calico/node:v3.14.2-arm64
        $ docker rmi calico/kube-controllers:v3.14.2-arm64
        $ docker rmi calico/pod2daemon-flexvol:v3.14.2-arm64
        
        • x86架构
        $ docker rmi calico/cni:v3.14.2-amd64
        $ docker rmi calico/node:v3.14.2-amd64
        $ docker rmi calico/kube-controllers:v3.14.2-amd64
        $ docker rmi calico/pod2daemon-flexvol:v3.14.2-amd64
        
      5. 在 Master 节点上执行如下命令,下载 yaml 文件。

        $ wget https://docs.projectcalico.org/v3.14/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml --no-check-certificate
        
      6. 在 Master 节点上执行如下命令,部署 calico。

        $ kubectl apply -f calico.yaml
        
      7. 在 Master 节点上执行如下命令,查看节点状态,状态为 Ready 即表明安装成功。

        $ kubectl get nodes
        

      加入集群

      1. 在 Worker 节点执行配置 Master 节点中保存的命令,将 Worker 节点加入集群。

        $ kubeadm join 192.168.122.72:6443 --token 9hyjsw.102m4qpmr93msfdv --discovery-token-ca-cert-hash sha256:ccf9a7762c7ae08fab3ec0649897b1de8e3ef37cf789517f42ea95fad0bd29b1
        

        说明: token默认有效期为24小时,若token超时,可在Master节点上执行命令kubeadm token create --print-join-command重新生成。

      2. 在Master节点上执行如下命令,查看集群中加入的子节点。

        $ kubectl get nodes
        
      3. 在Master节点上执行如下命令,查看集群中的 pod 状态,所有 pod 状态均为 Running 时表示配置成功,配置成功的界面显示如下图所示。

        $ kubectl get pods -A
        

      查看状态信息相关命令

      • 查看所有 pods。

        kubectl get pods -A
        
      • 查看当前节点上运行在某一命名空间的所有 pod。

        kubectl get pods -n $namespace
        
      • 查看某一命名空间下 pod 的详细信息。

        kubectl get pods -n $namespace -o wide
        
      • 查看单个 pod 信息,可用于定位 pod 状态异常问题。

        kubectl describe pod $podname -n $namespace
        
      • 删除pod,删除正在运行的pod,控制器会马上再创建一个新的。

        kubectl delete pods $podname
        

      软件卸载

      如果不需要使用 k8s 集群时,可以按本章节操作,删除 k8s 集群,以下命令需要分别在 Master 和 Worker 节点上执行。

      1. 执行如下命令,清空 k8s 集群设置。

        $ kubeadm reset
        $ rm –rf $HOME/.kube/config
        
      2. 执行如下命令,删除基础组件镜像。

        $ docker rmi k8s.gcr.io/kube-apiserver:v1.15.10
        $ docker rmi k8s.gcr.io/kube-controller-manager:v1.15.10
        $ docker rmi k8s.gcr.io/kube-scheduler:v1.15.10
        $ docker rmi k8s.gcr.io/kube-proxy:v1.15.10
        $ docker rmi k8s.gcr.io/pause:3.1
        $ docker rmi k8s.gcr.io/etcd:3.3.10
        $ docker rmi k8s.gcr.io/coredns:1.3.1 
        
      3. 执行如下命令,卸载管理软件。

        $ yum erase –y kubelet kubectl kubeadm kubernetes-cni 
        

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

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

      一键搞定!

      问题类型
      规范和低错类

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

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

      ● 英文中包含中文字符;

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

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

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

      易用性

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

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

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

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

      正确性

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

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

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

      ● 代码片段错误;

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

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

      风险提示

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

      内容合规

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

      ● 内容侵权;

      您对文档的总体满意度

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