请选择 进入手机版 | 继续访问电脑版

网络科技

    今日:1274| 主题:267517
收藏本版 (1)
互联网、科技极客的综合动态。

[其他] Kubernetes 集群安装指南

[复制链接]
心控2star 发表于 2016-10-1 15:39:57
404 15

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Docker 生态环境已经越来越完善了,很多公司已经把部分或者全部生产环境迁移到 Docker 上。好处是无论使用自建机房的裸机还是各大云平台的虚拟机,过程都是一致的。运维管理流程在 Docker 平台的基础上也变得标准化。
   发现很多 Kubernetes 的安装流程 都是依赖于某些云平台的,比如只针对于 AWS EC2, 只针对于 GCP,或者 DigitalOcean 。
  这篇流程应该适用于所有情况,包括你拿到一批裸机,或者在 AWS 和其他云平台拿到一批虚拟机,前提是只要你有这些机器的 root 权限即可完成安装。整个过程可以在你自己的机器上完成。前提是安装了 virtualbox 和 vagrant 。
   

Kubernetes 集群安装指南

Kubernetes 集群安装指南

  开始之前

  Vagrant 在这里的作用是在本机上启动 3 台虚拟机模拟整个安装过程。关于 Vagrant 的使用,可以参照我的其他文章。
  Kubernetes 是 Google 开源的 Docker Orchestration 工具,类似的工具还有 Docker Swarm,Mesos, 以及单机的 Docker Compose 。Kubernetes 以及得到了越来越多公司生产环境的验证。
   Kubernetes 的安装目前还是比较复杂,并且依照官方流程总会有这样那样的问题。所以这里把Kubernetes 的集群安装过程记录下来。
  Kubernetes 的控制端 kubectl 是一个文件,一般可以在任意地方执行进行集群的管理。
  1. 初始化 3 台虚拟机

  整个过程在实际的安装流程中可以省略。
  1. # -*- mode: ruby -*-
  2. # vi: set ft=ruby :
  3. Vagrant.configure(2) do |config|
  4.   config.vm.define "node1", primary: true do |node|
  5.     node.vm.box = "ubuntu/trusty64"
  6.     node.vm.hostname = 'node1'
  7.     node.vm.network :private_network, ip: "192.168.56.101"
  8.     node.vm.network "forwarded_port", guest: 80, host: 1234
  9.     node.vm.provider "virtualbox" do |vb|
  10.       vb.memory = 1024
  11.       vb.cpus = 1
  12.       vb.name = "node1"
  13.     end
  14.   end
  15.   config.vm.define "node2" do |node|
  16.     node.vm.box = "ubuntu/trusty64"
  17.     node.vm.hostname = 'node2'
  18.     node.vm.network :private_network, ip: "192.168.56.102"
  19.     node.vm.provider "virtualbox" do |vb|
  20.       vb.memory = 1024
  21.       vb.cpus = 1
  22.       vb.name = "node2"
  23.     end
  24.   end
  25.   config.vm.define "node3" do |node|
  26.     node.vm.box = "ubuntu/trusty64"
  27.     node.vm.hostname = 'node3'
  28.     node.vm.network :private_network, ip: "192.168.56.103"
  29.     node.vm.provider "virtualbox" do |vb|
  30.       vb.memory = 1024
  31.       vb.cpus = 1
  32.       vb.name = "node3"
  33.     end
  34.   end
  35.   config.vm.boot_timeout = 120
  36.   config.vm.synced_folder "../data", "/data"
  37. end
复制代码
将以上配置保存成 Vagrantfile 文件即可,然后在当前目录执行 vagrant up 命令,很快就可以拿到 3 台虚拟机。
  执行 vagrant status 可以得到 3 台虚拟机的状态:
  1. node1                     running (virtualbox)
  2. node2                     running (virtualbox)
  3. node3                     running (virtualbox)
复制代码
在这里虚拟机的 IP 分别是:
  1. node1 192.168.56.101
  2. node2 192.168.56.102
  3. node3 192.168.56.103
复制代码
2. 初始化 ubuntu 服务器,安装 docker 服务

  vagrant ssh node1 进入服务器,并且执行
  1. sudo su -s
  2. apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
  3. /etc/apt/sources.list.d/docker.list
  4. deb https://apt.dockerproject.org/repo ubuntu-trusty main
  5. apt-get update
  6. apt-get install ssh -y
  7. apt-get install curl -y
  8. apt-get install git -y
  9. apt-get install bridge-utils
  10. apt-get install docker-engine
复制代码
  依次在所有机器上进行相同的初始化操作,当然这些初始化工作可以用自动化工具实现,比如ansible 。这里为了表达清楚,都用手动执行。
  3. 添加统一权限

  假设 node1 为 master,在所有机器上增加权限,这里新生成一对秘钥并且添加到所有机器上:
  ssh-keygen -t rsa
  生成后的位置 /root/.ssh/id_rsa
  将公钥 /root/.ssh/id_rsa.pub 复制到所有机器上的 /root/.ssh/authorized_keys 文件中。
  4. 在 node1 主节点上安装 kubernetes:

  1. wget https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.4.0/kubernetes.tar.gz
  2. tar -xvf kubernetes.tar.gz
  3. # 修改配置文件的以下几行
  4. vi kubernetes/cluster/ubuntu/config-default.sh
  5. export nodes=${nodes:-"[email protected] [email protected] [email protected]"}
  6. roles=${roles:-"ai i i"}
  7. export NUM_NODES=${NUM_NODES:-3}
  8. cd kubernetes/cluster
  9. # 这个需要特殊处理,否则默认官方流程会报错,缺少文件,这些文件需要先解压。
  10. cp -a ../server/kubernetes/saltbase .
  11. cp ../server/bin/kubectl /usr/bin/
复制代码
5. 启动 kubernetes 集群

  1. KUBERNETES_PROVIDER=ubuntu ./kube-up.sh
复制代码
启动过程的输出信息如下:
  1. Deploying master and node on machine 192.168.56.101
  2. make-ca-cert.sh                                                                                                                          100% 4136     4.0KB/s   00:00
  3. easy-rsa.tar.gz                                                                                                                          100%   42KB  42.4KB/s   00:00
  4. config-default.sh                                                                                                                        100% 5595     5.5KB/s   00:00
  5. util.sh                                                                                                                                  100%   29KB  28.9KB/s   00:00
  6. kubelet.conf                                                                                                                             100%  645     0.6KB/s   00:00
  7. kube-proxy.conf                                                                                                                          100%  688     0.7KB/s   00:00
  8. kubelet                                                                                                                                  100% 2158     2.1KB/s   00:00
  9. kube-proxy                                                                                                                               100% 2233     2.2KB/s   00:00
  10. kube-controller-manager.conf                                                                                                             100%  761     0.7KB/s   00:00
  11. kube-scheduler.conf                                                                                                                      100%  682     0.7KB/s   00:00
  12. kube-apiserver.conf                                                                                                                      100%  682     0.7KB/s   00:00
  13. etcd.conf                                                                                                                                100%  707     0.7KB/s   00:00
  14. kube-apiserver                                                                                                                           100% 2358     2.3KB/s   00:00
  15. kube-scheduler                                                                                                                           100% 2360     2.3KB/s   00:00
  16. etcd                                                                                                                                     100% 2073     2.0KB/s   00:00
  17. kube-controller-manager                                                                                                                  100% 2672     2.6KB/s   00:00
  18. reconfDocker.sh                                                                                                                          100% 2082     2.0KB/s   00:00
  19. etcdctl                                                                                                                                  100%   14MB  13.7MB/s   00:00
  20. kube-apiserver                                                                                                                           100%  144MB  72.1MB/s   00:02
  21. kube-scheduler                                                                                                                           100%   77MB  77.0MB/s   00:01
  22. etcd                                                                                                                                     100%   16MB  15.9MB/s   00:00
  23. flanneld                                                                                                                                 100%   16MB  15.8MB/s   00:00
  24. kube-controller-manager                                                                                                                  100%  135MB 134.5MB/s   00:01
  25. kubelet                                                                                                                                  100%  123MB  61.4MB/s   00:02
  26. kube-proxy                                                                                                                               100%   69MB  69.5MB/s   00:01
  27. flanneld                                                                                                                                 100%   16MB  15.8MB/s   00:00
  28. flanneld.conf                                                                                                                            100%  579     0.6KB/s   00:00
  29. flanneld                                                                                                                                 100% 2121     2.1KB/s   00:00
  30. flanneld.conf                                                                                                                            100%  570     0.6KB/s   00:00
  31. flanneld                                                                                                                                 100% 2131     2.1KB/s   00:00
  32. etcd start/running, process 5093
  33. etcd cluster has no published client endpoints.
  34. Try '--no-sync' if you want to access non-published client endpoints(http://127.0.0.1:2379,http://127.0.0.1:4001).
  35. Error:  client: no endpoints available
  36. etcd cluster has no published client endpoints.
  37. Try '--no-sync' if you want to access non-published client endpoints(http://127.0.0.1:4001,http://127.0.0.1:2379).
  38. Error:  client: no endpoints available
  39. Error:  100: Key not found (/coreos.com) [24]
  40. {"Network":"172.16.0.0/16", "Backend": {"Type": "vxlan"}}
  41. {"Network":"172.16.0.0/16", "Backend": {"Type": "vxlan"}}
  42. docker stop/waiting
  43. docker start/running, process 5314
  44. Connection to 192.168.56.101 closed.
  45. Deploying node on machine 192.168.56.102
  46. config-default.sh                                                                                                                        100% 5595     5.5KB/s   00:00
  47. util.sh                                                                                                                                  100%   29KB  28.9KB/s   00:00
  48. reconfDocker.sh                                                                                                                          100% 2082     2.0KB/s   00:00
  49. kubelet.conf                                                                                                                             100%  645     0.6KB/s   00:00
  50. kube-proxy.conf                                                                                                                          100%  688     0.7KB/s   00:00
  51. kubelet                                                                                                                                  100% 2158     2.1KB/s   00:00
  52. kube-proxy                                                                                                                               100% 2233     2.2KB/s   00:00
  53. kubelet                                                                                                                                  100%  123MB  61.4MB/s   00:02
  54. kube-proxy                                                                                                                               100%   69MB  69.5MB/s   00:01
  55. flanneld                                                                                                                                 100%   16MB  15.8MB/s   00:01
  56. flanneld.conf                                                                                                                            100%  579     0.6KB/s   00:00
  57. flanneld                                                                                                                                 100% 2121     2.1KB/s   00:00
  58. flanneld start/running, process 3891
  59. docker stop/waiting
  60. docker start/running, process 4055
  61. Connection to 192.168.56.102 closed.
  62. Deploying node on machine 192.168.56.103
  63. config-default.sh                                                                                                                        100% 5595     5.5KB/s   00:00
  64. util.sh                                                                                                                                  100%   29KB  28.9KB/s   00:00
  65. reconfDocker.sh                                                                                                                          100% 2082     2.0KB/s   00:00
  66. kubelet.conf                                                                                                                             100%  645     0.6KB/s   00:00
  67. kube-proxy.conf                                                                                                                          100%  688     0.7KB/s   00:00
  68. kubelet                                                                                                                                  100% 2158     2.1KB/s   00:00
  69. kube-proxy                                                                                                                               100% 2233     2.2KB/s   00:00
  70. kubelet                                                                                                                                  100%  123MB  61.4MB/s   00:02
  71. kube-proxy                                                                                                                               100%   69MB  69.5MB/s   00:01
  72. flanneld                                                                                                                                 100%   16MB  15.8MB/s   00:00
  73. flanneld.conf                                                                                                                            100%  579     0.6KB/s   00:00
  74. flanneld                                                                                                                                 100% 2121     2.1KB/s   00:00
  75. flanneld start/running, process 2266
  76. docker stop/waiting
  77. docker start/running, process 2433
  78. Connection to 192.168.56.103 closed.
  79. Validating master
  80. Validating [email protected]
  81. Validating [email protected]
  82. Validating [email protected]
  83. Using master 192.168.56.101
  84. cluster "ubuntu" set.
  85. user "ubuntu" set.
  86. context "ubuntu" set.
  87. switched to context "ubuntu".
  88. Wrote config for ubuntu to /home/vagrant/.kube/config
  89. ... calling validate-cluster
  90. Found 3 node(s).
  91. NAME             STATUS    AGE
  92. 192.168.56.101   Ready     36s
  93. 192.168.56.102   Ready     22s
  94. 192.168.56.103   Ready     12s
  95. Validate output:
  96. NAME                 STATUS    MESSAGE              ERROR
  97. controller-manager   Healthy   ok
  98. scheduler            Healthy   ok
  99. etcd-0               Healthy   {"health": "true"}
  100. Cluster validation succeeded
  101. Done, listing cluster services:
  102. Kubernetes master is running at http://192.168.56.101:8080
  103. To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
复制代码
6. 至此 Kubernetes 集群已经启动成功

  根据提示信息,可以在浏览器打开 http://192.168.56.101:8080 查看 Kubernetes 的 API 已经可以访问了。
  1. # 查看机器状态
  2. kubectl get nodes
  3. NAME             STATUS    AGE
  4. 192.168.56.101   Ready     1m
  5. 192.168.56.102   Ready     59s
  6. 192.168.56.103   Ready     49s
复制代码
各台服务器的 Kubernetes 相关进程:
  1. # node1:
  2. /opt/bin/etcd -name infra -listen-client-urls http://127.0.0.1:4001,http://192.168.56.101:4001 -advertise-client-urls http://192.168.56.101:4001
  3. /opt/bin/kube-scheduler --logtostderr=true --master=127.0.0.1:8080
  4. /opt/bin/flanneld --etcd-endpoints=http://127.0.0.1:4001 --ip-masq --iface=192.168.56.101
  5. /opt/bin/kube-apiserver --insecure-bind-address=0.0.0.0 --insecure-port=8080 --etcd-servers=http://127.0.0.1:4001 --logtostderr=true --service-cluster-ip-range=192.168.3.0/24 --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,SecurityContextDeny,DefaultStorageClass,ResourceQuota --service-node-port-range=30000-32767 --advertise-address=192.168.56.101 --allow-privileged=false --client-ca-pold=/srv/kubernetes/ca.crt --tls-cert-pold=/srv/kubernetes/server.cert --tls-private-key-pold=/srv/kubernetes/server.key
  6. /opt/bin/kube-controller-manager --master=127.0.0.1:8080 --root-ca-pold=/srv/kubernetes/ca.crt --service-account-private-key-pold=/srv/kubernetes/server.key --logtostderr=true
  7. /opt/bin/kubelet --hostname-override=192.168.56.101 --api-servers=http://192.168.56.101:8080 --logtostderr=true --cluster-dns=192.168.3.10 --cluster-domain=cluster.local --config= --allow-privileged=false
  8. /opt/bin/kube-proxy --hostname-override=192.168.56.101 --master=http://192.168.56.101:8080 --logtostderr=true
  9. /usr/bin/dockerd -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock --bip=172.16.97.1/24 --mtu=1450 --raw-log
  10. # node2:
  11. /opt/bin/flanneld --etcd-endpoints=http://192.168.56.101:4001 --ip-masq --iface=192.168.56.102
  12. /opt/bin/kubelet --hostname-override=192.168.56.102 --api-servers=http://192.168.56.101:8080 --logtostderr=true --cluster-dns=192.168.3.10 --cluster-domain=cluster.local --config= --allow-privileged=false
  13. /opt/bin/kube-proxy --hostname-override=192.168.56.102 --master=http://192.168.56.101:8080 --logtostderr=true
  14. /usr/bin/dockerd -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock --bip=172.16.58.1/24 --mtu=1450 --raw-log
复制代码
基本可以看出 Kubernetes 的各个部件 etcd,kube-scheduler,flanneld,kube-apiserver,kube-controller-manager,kubelet,kube-proxy,dockerd 和他们之间的关系。
  7. 至此 Kubernetes 安装成功

  但是默认并没有安装 UI 界面,可以这样安装:
  1. cd ubuntu
  2. KUBERNETES_PROVIDER=ubuntu ./deployAddons.sh
复制代码
输出信息如下:
  1. node1                     running (virtualbox)
  2. node2                     running (virtualbox)
  3. node3                     running (virtualbox)0
复制代码
现在可以在 http://192.168.56.101:8080/ui 打开 Kubernetes Dashboard 的 UI 界面了。至此 Kubernetes 的安装基本完成。
  8. 在本地操作集群

   在 node1 可以看到这个集群的kubectl 配置信息:
  1. node1                     running (virtualbox)
  2. node2                     running (virtualbox)
  3. node3                     running (virtualbox)1
复制代码
在本地安装 kubectl 并且配置刚才初始化的 Kubernetes 集群的信息:
  1. node1                     running (virtualbox)
  2. node2                     running (virtualbox)
  3. node3                     running (virtualbox)2
复制代码
9. 停止 Kubernetes 集群

  1. node1                     running (virtualbox)
  2. node2                     running (virtualbox)
  3. node3                     running (virtualbox)3
复制代码
10. 销毁之前的 3 台本地虚拟机

  1. node1                     running (virtualbox)
  2. node2                     running (virtualbox)
  3. node3                     running (virtualbox)4
复制代码
   注册 DigitalOcean 免费获得 $10 折扣  
  参考

  https://docs.docker.com/engine/installation/linux/ubuntulinux/
  http://kubernetes.io/docs/getting-started-guides/ubuntu/



上一篇:Unity 增强对 Daydream 平台的支持
下一篇:微软将于月底停止销售预装Windows 7/8.1的电脑
西安网 发表于 2016-10-1 17:06:59
泥泞路上的奔驰,永远跑不过高速路上的夏利。说明:”平台很重要!”
回复 支持 反对

使用道具 举报

梁彩妮 发表于 2016-10-1 17:09:03
很好!很强大!
回复 支持 反对

使用道具 举报

syska 发表于 2016-10-1 21:57:39
不错 支持下
回复 支持 反对

使用道具 举报

顺7.自然 发表于 2016-10-4 03:57:21
占坑编辑ing
回复 支持 反对

使用道具 举报

迪琼斋 发表于 2016-10-7 04:28:32
走过路过请支持下!
回复 支持 反对

使用道具 举报

xiancaifu 发表于 2016-10-11 16:42:00
不错,顶一个!
回复 支持 反对

使用道具 举报

杜季杨 发表于 2016-10-14 14:44:58
广告位,坐下看看
回复 支持 反对

使用道具 举报

zywiq 发表于 2016-10-18 21:35:15
我只想安静地做个美男子
回复 支持 反对

使用道具 举报

骄傲锚说 发表于 2016-10-27 16:44:47
我死了,但是在烈火中我又站起来了,你猜是涅磐,还是尸变?
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )

© 2001-2017 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表