长期支持版本

    社区创新版本

      工具介绍

      本章介绍自动化部署工具的相关内容,建议用户在部署前阅读。

      部署方式

      openEuler 提供的 Kubernetes 集群自动化部署工具使用命令行方式进行集群的一键部署。它提供了如下几种部署方式:

      • 离线部署:本地准备好所有需要用到的 RPM 软件包、二进制文件、插件、容器镜像,并将它们按照一定的格式打包成一个 tar.gz 文件,然后完成对应 YAML 配置文件的编写,即可执行命令实现一键部署。当虚拟机无法访问外部网络时,可以采用该部署方式。
      • 在线部署:只需要完成对应 YAML 配置文件的编写,所需的RPM 软件包、二进制文件、插件、容器镜像,都在安装部署阶段连接互联网自动下载。该方式需要虚拟机能够访问软件源、集群依赖的镜像仓库,例如 Docker Hub 。

      配置介绍

      使用工具自动化部署 Kubernetes 集群时,使用 YAML 配置文件描述集群部署的信息,此处介绍各配置项含义以及配置示例。

      配置项介绍

      • cluster-id:集群名称,请遵循 DNS 域名的命名规范。例如 k8s-cluster 。

      • username:需要部署 k8s 集群的机器的 ssh 登录用户名,所有机器都需要使用同一个用户名。

      • private-key-path:ssh 免密登录的密钥存储文件的路径。private-key-path 和 password 只需要配置其中一项,如果两者都进行了配置,优先使用 private-key-path 。

      • masters:master 节点列表,建议每个 master 节点同时作为 worker 节点。每个 master 节点包含如下配置子项,多个 master 节点配置多组子项内容:

        • name:master 节点名称,为 k8s 集群看到的该节点名称
        • ip:master 节点的 IP 地址
        • port:ssh 登录该节点的端口,默认为 22
        • arch:master 节点的 CPU 架构,例如 x86_64 取值为 amd64
      • workers:worker 节点列表。每个 worker 节点包含如下配置子项,多个 worker 节点配置多个子项内容:

        • name:worker 节点名称,为 k8s 集群看到的该节点名称
        • ip:worker 节点的 IP 地址
        • port:ssh 登录该节点的端口,默认为 22
        • arch:worker 节点的 CPU 架构,例如 x86_64 取值为 amd64
      • etcds:etcd 节点的列表。如果该项为空,则会为每个 master 节点部署一个 etcd,否则只会部署配置的 etcd 节点。每个 etcd 节点包含如下配置子项,多个 etcd 节点配置多组子项内容:

        • name:etcd 节点的名称,为 k8s 集群看到的该节点的名称
        • ip:etcd 节点的 IP 地址
        • port:ssh 登录的端口
        • arch:etcd 节点的 CPU 架构,例如 x86_64 取值为 amd64
      • loadbalance:loadbalance 节点列表。每个 loadbalance 节点包含如下配置子项,多个 loadbalance 节点配置多组子项内容:

        • name:loadbalance 节点的名称,为 k8s 集群看到的该节点的名称
        • ip:loadbalance 节点的 IP 地址
        • port:ssh 登录的端口
        • arch:loadbalance 节点的 CPU 架构,例如 x86_64 取值为 amd64
        • bind-port:负载均衡服务的侦听端口
      • external-ca:是否使用外部 CA 证书,使用则配置为 true,反之,配置为 false

      • external-ca-path:外部 CA 证书文件的路径 。仅 external-ca 为 true 时有效

      • service:k8s 创建的 service 信息。service 配置包含如下配置子项:

        • cidr:k8s 创建的 service 的 IP 地址网段
        • dnsaddr:k8s 创建的 service 的 DNS 地址
        • gateway:k8s创建的 service 的网关地址
        • dns:k8s 创建的 coredns 的配置。dns 配置包含如下配置子项:
          • corednstype:k8s 创建的 coredns 的部署类型,支持 pod 和 binary
          • imageversion:pod 部署类型的 coredns 镜像版本
          • replicas:pod 部署类型的 coredns 副本数量
      • network:k8s 集群网络配置。network 配置包含如下配置子项:

        • podcidr:k8s 集群网络的 IP 地址网段
        • plugin:k8s 集群部署的网络插件
        • plugin-args:k8s 集群网络的网络插件的配置文件路径。例如 : {"NetworkYamlPath": "/etc/kubernetes/addons/calico.yaml"}
      • apiserver-endpoint:集群外部可访问的 APISERVER 服务的地址或域名,如果配置了 loadbalances 则填loadbalance 地址,否则填写第 1 个 master 节点地址。

      • apiserver-cert-sans:apiserver 相关证书中需要额外配置的 IP 和域名。它包含如下子配置项

        • dnsnames:apiserver 相关证书中需要额外配置的域名数组列表。
        • ips:apiserver 相关证书中需要额外配置的 IP 地址数组列表。
      • apiserver-timeout:apiserver 响应超时时间

      • etcd-token:etcd 集群名称

      • dns-vip:dns 的虚拟 IP 地址

      • dns-domain:DNS 域名后缀

      • pause-image:pause 容器的完整镜像名称

      • network-plugin:网络插件类型。仅支持配置 cni ,配置为空时使用 k8s 默认网络。

      • cni-bin-dir:网络插件地址,多个地址使用 "," 分隔,例如:/usr/libexec/cni,/opt/cni/bin

      • runtime:指定容器运行时类型,目前支持 docker 和 iSulad

      • runtime-endpoint:容器运行时 endpoint,当 runtime 为 docker 时,可以不指定

      • registry-mirrors:下载容器镜像时,使用的镜像仓库的 mirror 站点地址

      • insecure-registries:下载容器镜像时,使用 http 协议下载镜像的镜像仓库地址

      • config-extra-args:各个组件(例如 kube-apiserver、etcd)服务启动配置的额外参数。它包含如下子配置项:

        • name:组件名称,支持 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet

        • extra-args:组件的拓展参数,格式为 key: value 格式,注意 key 对应的组件参数前需要加上 "-" 或者 "--" 。

        • open-ports:配置需要额外打开的端口,k8s 自身所需端口不需要进行配置,k8s 以外的插件端口需要进行额外配置。

          • worker | master | etcd | loadbalance:指定打开端口的节点类型,每项配置包含一个多或者多个 port 和 protocol 子配置项。
            • port:端口地址
            • protocol:端口类型,可选值为 tcp 或者 udp
        • install:配置各种类型节点上需要安装的安装包或者二进制文件的详细信息,注意将对应文件放到 tar.gz 安装包中。以下给全量配置说明,具体配置请根据实际情况选择。

          • package-source:配置安装包的详细信息
            • type:安装包的压缩类型,目前只支持 tar.gz 类型的安装包
            • dstpath:安装包在对端机器上的路径,必须是可用的绝对路径
            • srcpath:不同架构安装包的存放路径,架构必须与机器架构相对应,必须是可用的绝对路径
              • arm64:arm64 架构安装包的路径,配置的机器中存在 arm64 机器场景下需要配置
              • amd64:amd64 类型安装包的路径,配置的机器中存在 x86_64 机器场景下需要配置

          说明

          • install 配置中 etcd、kubernetes-master、kubernetes-worker、network、loadbalance、container、image、dns 中的子配置项相同,都是 name、type、dst,schedule、TimeOut 。其中 dst,schedule、TimeOut 为可选项,用户根据安装的文件决定是否配置。下述仅以 etcd 和 kubernetes-master 节点的配置为例说明。
          • etcd:etcd 类型节点需要安装的包或二进制文件列表
            • name:需要安装的软件包或二进制文件的名称,如果是安装包则只写名称,不填写具体的版本号,安装时会使用 $name* 识别,例如 etcd 。如果为多个软件包,各名称使用 ,分隔 。
            • type:配置项类型,可选值为 pkg、repo、bin、file、dir、image、yaml、shell 。如果配置为 repo ,请在对应节点上配置 repo 源
            • dst:目的文件夹路径,type 为 bin、file、dir 类型时需要配置。表示将文件/文件夹放到节点的哪个目录下,为了防止用户误配置路径,导致 cleanup 时删除重要文件,此配置必须配置为白名单中的路径。详见 “白名单说明” 。
          • kubernetes-master:k8s master 类型节点需要安装的包或二进制文件列表
          • kubernetes-worker:k8s worker 类型节点需要安装的包或二进制文件列表
          • network:网络需要安装的包或二进制文件列表
          • loadbalance:loadbalance 类型节点需要安装的包或二进制文件列表
          • container:容器需要安装的包或二进制文件列表
          • image:容器镜像 tar 包
          • dns:k8s coredns 安装包。如果 corednstype 配置为 pod,此处无需配置
          • addition:额外的安装包或二进制文件列表
            • master:以下配置会安装在所有 master 节点
              • name:需要安装的软件包或二进制文件的名称
              • type:配置项类型,可选值为 pkg、repo、bin、file、dir、image、yaml、shell 。如果配置为 repo ,请在对应节点上配置 repo 源
              • schedule:仅在 type 为 shell 时有效,代表用户想要执行脚本的时机,支持 prejoin(节点加入前)、postjoin(节点加入后)、precleanup(节点退出前)、postcleanup(节点退出后)。
              • TimeOut:脚本执行超时时间,超时时该进程被强制终止运行。未配置默认为 30s
            • worker:配置会安装在所有 worker 节点,具体配置格式和 addition 下的 master 相同

      白名单介绍

      install 配置中 dst 项的值必须符合白名单规则,配置为白名单对应路径及其子目录。当前白名单如下:

      • /usr/bin
      • /usr/local/bin
      • /opt/cni/bin
      • /usr/libexec/cni
      • /etc/kubernetes
      • /usr/lib/systemd/system
      • /etc/systemd/system
      • /tmp

      配置示例

      此处给出一个 YAML 文件配置示例。从示例可知,同一台机器,可以部署多个类型的节点,但是不同节点的配置必须一致,例如 test0 机器部署了 master 和 worker 类型。

      cluster-id: k8s-cluster
      username: root
      private-key-path: /root/.ssh/private.key
      masters:
      - name: test0
        ip: 192.168.0.1
        port: 22
        arch: arm64
      workers:
      - name: test0
        ip: 192.168.0.1
        port: 22
        arch: arm64
      - name: test1
        ip: 192.168.0.3
        port: 22
        arch: arm64
      etcds:
      - name: etcd-0
        ip: 192.168.0.4
        port: 22
        arch: amd64
      loadbalance:
        name: k8s-loadbalance
        ip: 192.168.0.5
        port: 22
        arch: amd64
        bind-port: 8443
      external-ca: false
      external-ca-path: /opt/externalca 
      service:
        cidr: 10.32.0.0/16
        dnsaddr: 10.32.0.10
        gateway: 10.32.0.1
        dns:  
          corednstype: pod
          imageversion: 1.8.4
          replicas: 2
      network:
        podcidr: 10.244.0.0/16
        plugin: calico
        plugin-args: {"NetworkYamlPath": "/etc/kubernetes/addons/calico.yaml"}
      apiserver-endpoint: 192.168.122.222:6443
      apiserver-cert-sans:
        dnsnames: []
        ips: []
      apiserver-timeout: 120s
      etcd-external: false
      etcd-token: etcd-cluster
      dns-vip: 10.32.0.10 
      dns-domain: cluster.local
      pause-image: k8s.gcr.io/pause:3.2
      network-plugin: cni 
      cni-bin-dir: /usr/libexec/cni,/opt/cni/bin
      runtime: docker
      runtime-endpoint: unix:///var/run/docker.sock
      registry-mirrors: []
      insecure-registries: []
      config-extra-args:
        - name: kubelet
          extra-args:
            "--cgroup-driver": systemd
      open-ports:
        worker:
        - port: 111
          protocol: tcp
        - port: 179
          protocol: tcp
      install:
        package-source:
          type: tar.gz
          dstpath: ""
          srcpath: 
            arm64: /root/rpms/packages-arm64.tar.gz
            amd64: /root/rpms/packages-x86.tar.gz
        etcd:
        - name: etcd
          type: pkg
          dst: ""
        kubernetes-master:
        - name: kubernetes-client,kubernetes-master
          type: pkg
        kubernetes-worker:
        - name: docker-engine,kubernetes-client,kubernetes-node,kubernetes-kubelet
          type: pkg
          dst: ""
        - name: conntrack-tools,socat
          type: pkg
          dst: ""
        network:
        - name: containernetworking-plugins
          type: pkg
          dst: ""
        loadbalance:
        - name: gd,gperftools-libs,libunwind,libwebp,libxslt
          type: pkg
          dst: ""
        - name: nginx,nginx-all-modules,nginx-filesystem,nginx-mod-http-image-filter,nginx-mod-http-perl,nginx-mod-http-xslt-filter,nginx-mod-mail,nginx-mod-stream
          type: pkg
          dst: ""
        container:
        - name: emacs-filesystem,gflags,gpm-libs,re2,rsync,vim-filesystem,vim-common,vim-enhanced,zlib-devel
          type: pkg
          dst: ""
        - name: libwebsockets,protobuf,protobuf-devel,grpc,libcgroup
          type: pkg
          dst: ""
        - name: yajl,lxc,lxc-libs,lcr,clibcni,iSulad
          type: pkg
          dst: ""
        image:  
        - name: pause.tar
          type: image
          dst: ""
        dns:    
        - name: coredns
          type: pkg
          dst: ""
        addition:
          master:
          - name: prejoin.sh
            type: shell
            schedule: "prejoin"
            TimeOut:  "30s"
          - name: calico.yaml
            type: yaml
            dst: ""
          worker:
          - name: docker.service
            type: file
            dst: /usr/lib/systemd/system/
          - name: postjoin.sh
            type: shell
            schedule: "postjoin"
      

      安装包结构

      如果是离线部署,需要准备 Kubernetes 以及相关的离线安装包,并遵循特定目录结构存放离线安装包。需要遵循的目录结构如下:

      package
      ├── bin
      ├── dir
      ├── file
      ├── image
      ├── pkg
      └── packages_notes.md
      

      上述各目录的含义如下:

      • 离线部署包的目录结构与集群配置 config 中的 package 的类型对应,package 类型有 pkg、repo、bin、file、dir、image、yaml、shell 八种。

      • bin 目录存放二进制文件,对应 package 类型 bin 。

      • dir 目录存放需要拷贝到目标机器的目录,需要配置 dst 目的地路径,对应 package 类型 dir 。

      • file 目录存放 file、yaml、shell 三种类型的文件。其中 file 类型代表需要拷贝到目标机器的文件,同时需要配置 dst 目的地路径;yaml 类型代表用户自定义的 YAML 文件,会在集群部署完成后 apply 该 YAML 文件;shell 类型代表用户想要执行的脚本,同时需要配置 schedule 执行时机,执行时机包括 prejoin(节点加入前)、postjoin(节点加入后)、precleanup(节点退出前)、postcleanup(节点退出后)四个阶段。

      • image 目录存放需要导入的容器镜像。这些容器镜像必须兼容 docker 的 tar 包格式(例如由 docker 或 isula-build 导出镜像)。

      • pkg 目录下存放需要安装的 rpm/deb 包,对应 package 类型 pkg 。建议使用二进制文件,便于跨发行版本的部署。

      命令参考

      openEuler 提供的集群部署工具,使用命令行 eggo 进行集群部署。

      部署 k8s 集群

      通过指定的 YAML 配置部署 k8s 集群:

      eggo deploy [ -d ] -f deploy.yaml

      参数是否必选参数含义
      --debug | -d打印调试信息
      --file | -f指定部署 k8s 集群的 YAML 文件路径

      加入单节点

      将指定的单节点加入到 k8s 集群中:

      eggo join [ -d ] --id k8s-cluster [ --type master,worker ] --arch arm64 --port 22 [ --name master1] IP

      参数是否必选参数含义
      --debug | -d打印调试信息
      --id指定将要加入 k8s 集群名称
      --type | -t指定加入节点的类型,支持 master、worker 。多个类型使用 “,” 隔开,默认值为 worker 。
      --arch | -a指定加入节点的 CPU 架构
      --port | -p指定 ssh 登录所加入节点的端口号
      --name | -n指定加入节点的名称
      IP加入节点的实际 IP 地址

      加入多节点

      将指定的多个节点加入到 k8s 集群:

      eggo join [ -d ] --id k8s-cluster -f nodes.yaml

      参数是否必选参数含义
      --debug | -d打印调试信息
      --id指定将要加入 k8s 集群名称
      --file | -f指定加入节点的 YAML 配置文件路径

      删除节点

      删除 k8s 集群中的一个或者多个节点:

      eggo delete [ -d ] --id k8s-cluster node [node...]

      参数是否必选参数含义
      --debug | -d打印调试信息
      --id指定将要删除的节点所在的集群名称
      node要删除的单个或多个节点的 IP 地址或者节点名称

      删除集群

      删除整个 k8s 集群:

      eggo cleanup [ -d ] --id k8s-cluster [ -f deploy.yaml ]

      参数是否必选参数含义
      --debug | -d打印调试信息
      --id指定将要清除的 k8s 集群名称
      --file | -f指定清除 k8s 集群的 YAML 文件路径。不指定时,默认使用部署集群时缓存的集群配置。正常情况下,建议不配置该选项,仅异常情况下配置。

      说明

      • 建议使用部署集群时缓存的集群配置删除集群,即正常情况下,不建议配置 --file | -f 参数。当异常导致缓存配置破坏或者丢失时,才配置该参数。

      查询集群

      查询当前所有通过 eggo 部署的 k8s 集群:

      eggo list [ -d ]

      参数是否必选参数含义
      --debug | -d打印调试信息

      生成集群配置文件

      快速生成部署 k8s 集群所需的 YAML 配置文件:

      eggo template -d -f template.yaml -n k8s-cluster -u username -p password --etcd [192.168.0.1,192.168.0.2] --masters [192.168.0.1,192.168.0.2] --workers 192.168.0.3 --loadbalance 192.168.0.4

      参数是否必选参数含义
      --debug | -d打印调试信息
      --file | -f指定生成的 YAML 文件的路径
      --name | -n指定 k8s 集群的名称
      --username | -u指定 ssh 登录所配置节点的用户名
      --password | -p指定 ssh 登录所配置节点的密码
      --etcd指定 etcd 节点的 IP 列表
      --masters指定 master 节点的 IP 列表
      --workers指定 worker 节点的 IP 列表
      --loadbalance | -l指定 loadbalance 节点的 IP

      查询帮助信息

      查询 eggo 命令的帮助信息:

      eggo help

      查询子命令帮助信息

      查询 eggo 子命令的帮助信息:

      eggo deploy | join | delete | cleanup | list | template -h

      参数是否必选参数含义
      --help| -h打印帮助信息

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

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

      一键搞定!

      问题类型
      规范和低错类

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

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

      ● 英文中包含中文字符;

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

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

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

      易用性

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

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

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

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

      正确性

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

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

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

      ● 代码片段错误;

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

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

      风险提示

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

      内容合规

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

      ● 内容侵权;

      您对文档的总体满意度

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