创建Kubernetes集群

DomeOS底层对接Kubernetes集群,集群配置存储服务选用etcd,容器方案选用Docker,网络方案选用Flannel,用户可以将自己搭建的Kubernetes集群添加进DomeOS系统中。我们提供了在Centos 7、Ubuntu 12.04、Ubuntu 14.04、Ubuntu 15.10、Ubuntu 16.04中部署Kubernetes集群的相关脚本以帮助用户创建集群。本章文档提供的kubernetes master启动脚本是单点模式启动,如果想配置高可用master,可以参考文档附录->配置高可用k8s集群章节。

注意:如果已经有了kubernetes,可以跳过该步骤,进入下一步配置。请确保kubernetes集群的node可以正常访问私有仓库

部署etcd集群

etcd集群为Kubernetes集群、Flannel、SkyDNS提供key-value存储服务,主要用于存储Kubetnetes所有组件的定义和状态、Flannel的配置及节点状态、SkyDNS记录。我们提供了部署etcd集群的相关脚本,如下表所示:

文件名说明下载地址
start_etcd.shetcd集群部署脚本http://domeos-script.bjctc.scs.sohucs.com/start_etcd.sh

使用方式

  • 显示帮助信息
  1. bash start_etcd.sh help
  • 部署etcd集群在各个需要部署etcd的主机节点上执行如下命令
  1. sudo bash start_etcd.sh [options]

说明

  • 启动前请确认各主机的系统时间一致,如不一致可以通过ntpdate进行校准,如ntpdate ntp.sohu.com。
  • etcd建议使用2.0以上的版本,本脚本提供了2.2.1,2.3.1,3.0.17和3.1.3四个版本的下载和配置。
  • 还没启动所有节点时会报找不到未启动节点的错误,属正常现象,所有节点启动后将不报该错误。
  • 同一etcd集群所有节点的—peer-port参数值和—cluster-nodes参数值(包括IP地址的顺序)必须完全一致。参数说明
  1. --cluster-nodes: 集群所有节点的IP列表,各IP间以半角逗号分隔。(必需)
  2. --client-port: 客户端通信监听端口,默认为 4012
  3. --data-path: 数据目录,默认为 /var/lib/etcd
  4. --etcd-version: etcd版本,默认为 3.1.3,可选值为{2.2.1, 2.3.13.0.173.1.3}。
  5. --peer-port: 节点间通信监听端口,默认为 4010

样例

若用于部署etcd集群的主机为:

  1. 10.11.150.100
  2. 10.11.150.101
  3. 10.11.150.102

各节点的客户端通信监听端口为4012,数据存储目录为/opt/etcd/data,etcd版本为3.1.3,节点间通信监听端口为4010,则需要在三台主机上分别执行:

  1. sudo bash start_etcd.sh \
  2. --cluster-nodes 10.11.150.100,10.11.150.101,10.11.150.102 \
  3. --client-port 4012 \
  4. --data-path /opt/etcd/data \
  5. --etcd-version 3.1.3 \
  6. --peer-port 4010

验证

通过curl -L <etcd节点IP>:<client-port>/health查看各个节点服务状态,若返回true说明该节点上的etcd正常。

  1. curl -L 10.11.150.100:4012/health
  2. {"health": "true"}

参考

etcd官方地址:https://coreos.com/etcd/

部署 Kubernetes master

我们提供了在CentOS和Ubuntu中部署Kubernetes master的脚本,通过该脚本将安装和启动如下组件:Flannel、Docker、kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy。脚本下载地址如下:

文件名说明下载地址
start_master_centos.sh在CentOS中部署Kubernetes masterhttp://domeos-script.bjctc.scs.sohucs.com/start_master_centos.sh
start_master_ubuntu.sh在Ubuntu中部署Kubernetes masterhttp://domeos-script.bjctc.scs.sohucs.com/start_master_ubuntu.sh

使用方式

  • 显示帮助信息CentOS系统中执行如下命令
  1. bash start_master_centos.sh help

Ubuntu系统中执行如下命令

  1. bash start_master_ubuntu.sh help
  • 部署masterCentOS系统中执行如下命令
  1. sudo bash start_master_centos.sh [options]

Ubuntu系统中执行如下命令

  1. sudo bash start_master_ubuntu.sh [options]

说明

  • 脚本目前支持在CentOS 7、Ubuntu12.04、Ubuntu 14.04、Ubuntu 15.10和Ubuntu 16.04系统中部署。
  • 脚本中安装docker与下载Kubernetes组件和Flannel组件需要连接互联网。如果所在主机无法访问外网,可先将相关组件放到脚本所在目录,注释脚本中下载组件的语句,并在本地安装完docker后再执行该脚本。
  • 脚本成功执行后,将以systemd的形式启动如下服务: flanneld, docker, kube-apiserver, kube-controller-manager, kube-scheduler, kube-proxy。
  • —service-cluster-ip-range和—flannel-network-ip-range地址段不能有重叠。
  • 如果设置了私有仓库以https的方式访问且是使用了自签名证书,脚本会从DomeOS Server上下载证书文件(registry.crt),因此需要当前主机可访问DomeOS Server。参数说明
  1. --cluster-dns: 集群dns服务的ip地址,注意不加端口号,IP地址需落在--service-cluster-ip-range范围内,默认172.16.40.1。注意:此时dns服务尚未配置,应记下这一地址,配置dns服务时使用这一地址作为dns服务的ClusterIP
  2. --cluster-domain: 集群的search域,默认为domeos.local。注意:此时dns服务尚未配置,应记下这一配置项,配置dns服务是使用这一配置项作为dns服务的domain
  3. --docker-graph-path: docker运行时的根路径,容器、本地镜像等会存储在该路径下,占用空间大,建议设置到大容量磁盘上,默认为脚本所在路径下的docker-graph目录。
  4. --domeos-serverDomeOS Server服务地址,当--insecure-registry-crt=true时为必需项。
  5. --etcd-servers: etcd服务集群地址,各地址间以逗号分隔。(必需)
  6. --etcd-prefix: kubernetes数据与flannel数据在etcd中的存储路径的前缀。
  7. --flannel-network-ip-range: flannel网络可用地址范围,默认172.24.0.0/13
  8. --flannel-subnet-len: 分配给flannel节点的子网长度,默认22
  9. --flannel-version: Flannel版本。默认0.5.5,可选版本为{0.5.5}。
  10. --insecure-bind-address: kube-apiserver非安全访问服务地址,默认0.0.0.0
  11. --insecure-port: kube-apiserver非安全访问服务端口,默认8080
  12. --kube-apiserver-port: kube-apiserver服务端口,默认8080
  13. --kubernetes-version: Kubernetes版本。默认1.4.7,可选版本为{1.1.31.1.71.2.01.2.41.2.81.3.111.4.71.5.5}。
  14. --service-cluster-ip-range: kubernetes集群service的可用地址范围,默认172.16.0.0/13
  15. --registry-type: 私有仓库类型,取值为httphttps,必需项。
  16. --registry-arg: 私有仓库的地址,可以为域名地址,必需项。
  17. --insecure-registry-crt:如果私有仓库类型是https且使用了自签名证书,此时取值为true,默认false
  18. --secure-port:集群的https访问端口,带有用户名密码的安全验证,非必填项。
  19. --kube-userhttpskubernetes集群的验证用户,默认为admin
  20. --kube-passwdhttpskubernetes集群的验证密码,默认为admin

样例

  • 最简参数
  1. sudo bash start_master_centos.sh \
  2. --etcd-servers http://10.11.151.100:4012 \
  3. --registry-type http \
  4. --registry-arg 10.10.10.10:5000
  1. sudo bash start_master_ubuntu.sh \
  2. --etcd-servers http://10.11.151.100:4012 \
  3. --registry-type http \
  4. --registry-arg 10.10.10.10:5000
  • 最全参数
  1. sudo bash start_master_centos.sh \
  2. --cluster-dns 172.16.40.1 \
  3. --cluster-domain domeos.local \
  4. --docker-graph-path /opt/domeos/openxxs/docker \
  5. --etcd-servers http://10.11.150.99:4012,http://10.11.150.100:4012,http://10.11.150.101:4012 \
  6. --etcd-prefix domeos \
  7. --flannel-network-ip-range 172.24.0.0/13 \
  8. --flannel-subnet-len 22 \
  9. --flannel-version 0.5.5 \
  10. --insecure-bind-address 0.0.0.0 \
  11. --insecure-port 8080 \
  12. --kube-apiserver-port 8080 \
  13. --kubernetes-version 1.4.7 \
  14. --service-cluster-ip-range 172.16.0.0/13 \
  15. --registry-type http \
  16. --registry-arg 10.10.10.10:5000 \
  17. --secure-port 8443 \
  18. --kube-user admin \
  19. --kube-passwd admin
  1. sudo bash start_master_ubuntu.sh \
  2. --cluster-dns 172.16.40.1 \
  3. --cluster-domain domeos.local \
  4. --docker-graph-path /opt/domeos/openxxs/docker \
  5. --etcd-servers http://10.11.150.99:4012,http://10.11.150.100:4012,http://10.11.150.101:4012 \
  6. --etcd-prefix domeos \
  7. --flannel-network-ip-range 172.24.0.0/13 \
  8. --flannel-subnet-len 22 \
  9. --flannel-version 0.5.5 \
  10. --insecure-bind-address 0.0.0.0 \
  11. --insecure-port 8080 \
  12. --kube-apiserver-port 8080 \
  13. --kubernetes-version 1.4.7 \
  14. --service-cluster-ip-range 172.16.0.0/13 \
  15. --registry-type http \
  16. --registry-arg 10.10.10.10:5000 \
  17. --secure-port 8443 \
  18. --kube-user admin \
  19. --kube-passwd admin

验证

  1. $ sudo /usr/sbin/domeos/k8s/current/kubectl cluster-info
  2. Kubernetes master is running at http://localhost:8080

参考

在Kubetnetes集群中添加node

我们提供了在CentOS和Ubuntu中部署Kubernetes node的脚本,通过该脚本将安装和启动如下组件:Flannel、Docker、kube-proxy、kubelet。脚本下载地址如下:

文件名说明下载地址
start_node_centos.sh在CentOS中部署Kubernetes nodehttp://domeos-script.bjctc.scs.sohucs.com/start_node_centos.sh
start_node_ubuntu.sh在Ubuntu中部署Kubernetes nodehttp://domeos-script.bjctc.scs.sohucs.com/start_node_ubuntu.sh
change_hostname.sh修改hostname脚本http://domeos-script.bjctc.scs.sohucs.com/change_hostname.sh

使用方式

  • 显示帮助信息CentOS系统中执行如下命令
  1. bash start_node_centos.sh help

Ubuntu系统中执行如下命令

  1. bash start_node_ubuntu.sh help
  • 部署nodeCentOS系统中执行如下命令
  1. sudo bash start_node_centos.sh [options]

Ubuntu系统中执行如下命令

  1. sudo bash start_node_ubuntu.sh [options]

说明

  • 脚本目前支持在CentOS 7、Ubuntu12.04、Ubuntu 14.04、Ubuntu 15.10和Ubuntu 16.04系统中部署。
  • 脚本会对hostname进行检查,如果不符合dns规范,请通过change_hostname.sh脚本对主机hostname进行修改。
  • 在DomeOS系统中,node包含标签PRODENV=HOSTENVTYPE表示可用于生产环境;包含标签TESTENV=HOSTENVTYPE表示可用于测试环境;包含标签BUILDENV=HOSTENVTYPE表示可用于构建镜像。
  • 在添加node时集群的dns服务可不启动。
  • 脚本中安装docker与下载kubernetes相关组件需要连接互联网。如果所在主机无法访问外网,可先将相关组件放到脚本所在目录,注释脚本中下载组件的语句,并在本地安装完docker后再执行该脚本。
  • 若—start-agent设置为true,脚本将下载并启动agent镜像(pub.domeos.org/domeos/agent:2.6-supervisor)。如果所在主机无法访问外网,可以将该镜像上传至私有镜像仓库,并修改脚本中镜像名称为私有镜像仓库中的相应镜像,再执行脚本。
  • 如果设置了私有仓库以https的方式访问且是使用了自签名证书,脚本会从DomeOS Server上下载证书文件(registry.crt),因此需要当前主机可访问DomeOS Server。
  • 脚本成功执行后,将以systemctl的形式启动flanneld、docker、kube-proxy、kubelet,将以容器形式启动用于监控数据上报和作为WebSSH Client端的agent,并为该节点打上指定的标签。参数说明
  1. --api-server: kubernetes集群kube-apiserver服务地址,必需项,格式为"ip:port"
  2. --cluster-dns: kubernetes集群内dns服务地址,与kubernetes master启动参数一致,默认为"172.16.40.1"
  3. --cluster-domain: kubernetes集群内dns服务的search域,与kubernetes master启动参数一致,默认为"domeos.local"
  4. --docker-graph-path: docker运行时的根路径,容器、本地镜像等会存储在该路径下,占用空间大,建议设置到大容量磁盘上,默认为"/var/lib/docker"
  5. --docker-log-level: docker daemon的日志级别,可选值debug/info/warn/error/fatalkubernetes会定时查询所有容器状态,导致docker daemon输出大量info级别日志到系统日志中(/var/log/message),建议日志级别设置为warn级别以上,默认为warn
  6. --domeos-serverDomeOS Server服务地址,当--insecure-registry-crt=true时为必需项。
  7. --etcd-server: etcd集群服务地址,各个地址间以半角逗号分隔,格式为'http://IP:Port',必需项。
  8. --etcd-prefix: flannel数据在etcd中的存储路径的前缀。
  9. --flannel-version: Flannel版本。默认0.5.5,可选版本为{0.5.5}。
  10. --heartbeat-addr: 监控hbs服务监听地址,只能配置一个。
  11. --hostname-override: 若设置了该参数,则向Kubernetes集群中注册节点时使用该参数值作为节点的名称。默认值为节点的hostname
  12. --k8s-data-dir: Kubelet产生的相关文件的存储目录,包括emptyDir,默认为"/var/lib/kubelet"
  13. --kubernetes-version: Kubernetes版本,必须与对应的Kubernetes master版本相同。默认1.4.7,可选版本为{1.1.31.1.71.2.01.2.41.2.81.3.111.4.71.5.5}。
  14. --monitor-transfer: 监控transfer服务地址,可以填多个,各个地址间以逗号分隔。若设置了--heartbeat-addr的值,则此项为必需项。当设置了--monitor-transfer时,节点上会以docker容器形式启动名为agent的容器,用于收集监控信息。
  15. --node-labels: node打上的标签,非必需。
  16. --registry-type: 私有仓库类型,取值为httphttps,必需项。
  17. --registry-arg: 私有仓库的地址,可以为域名地址,必需项。
  18. --insecure-registry-crt:如果私有仓库类型是https且使用了自签名证书,此时取值为true,默认false
  19. --kube-user:访问kubernetes api server的用户名,若master有安全验证,则该项必填。
  20. --kube-passwd:访问kubernetes api server的密码,若master有安全验证,则该项必填。

样例

  1. sudo bash start_node_ubuntu.sh \
  2. --api-server http://10.10.10.10:8081 \
  3. --cluster-dns 172.16.40.1 \
  4. --cluster-domain domeos.local \
  5. --docker-graph-path /opt/domeos/openxxs/docker-graph \
  6. --docker-log-level warn \
  7. --etcd-server http://10.11.150.100:4012,http://10.11.150.101:4012,http://10.11.150.102:4012 \
  8. --etcd-prefix domeos \
  9. --flannel-version 0.5.5 \
  10. --heartbeat-addr 10.10.10.10:6030 \
  11. --hostname-override test-host \
  12. --k8s-data-dir /opt/domeos/openxxs/k8s-data \
  13. --kubernetes-version 1.4.7 \
  14. --monitor-transfer 10.10.10.10:8433,10.10.10.11:8433 \
  15. --node-labels TESTENV=HOSTENVTYPE,PRODENV=HOSTENVTYPE \
  16. --registry-type http \
  17. --registry-arg 10.10.10.10:5000

验证

使用kubectl —server <kube-apiserver服务地址> get node命令查看集群的node节点状态,若显示该节点的状态为"Ready",说明该node添加成功。如:

  1. kubectl --server 10.10.10.10:8081 get nodes
  2. NAME STATUS AGE
  3. tc-151-100 Ready 25d

参考