长期支持版本

    工具介绍

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

    部署方式

    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备份