网络科技

    今日:432| 主题:245438
收藏本版
互联网、科技极客的综合动态。

[其他] Kubernetes 集群安装指南

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

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

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

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

  开始之前

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

  整个过程在实际的安装流程中可以省略。
  [code]# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.define "node1", primary: true do |node|
    node.vm.box = "ubuntu/trusty64"
    node.vm.hostname = 'node1'
    node.vm.network :private_network, ip: "192.168.56.101"
    node.vm.network "forwarded_port", guest: 80, host: 1234
    node.vm.provider "virtualbox" do |vb|
      vb.memory = 1024
      vb.cpus = 1
      vb.name = "node1"
    end
  end

  config.vm.define "node2" do |node|
    node.vm.box = "ubuntu/trusty64"
    node.vm.hostname = 'node2'
    node.vm.network :private_network, ip: "192.168.56.102"
    node.vm.provider "virtualbox" do |vb|
      vb.memory = 1024
      vb.cpus = 1
      vb.name = "node2"
    end
  end

  config.vm.define "node3" do |node|
    node.vm.box = "ubuntu/trusty64"
    node.vm.hostname = 'node3'
    node.vm.network :private_network, ip: "192.168.56.103"
    node.vm.provider "virtualbox" do |vb|
      vb.memory = 1024
      vb.cpus = 1
      vb.name = "node3"
    end
  end

  config.vm.boot_timeout = 120
  config.vm.synced_folder "../data", "/data"

end[/code]  将以上配置保存成 Vagrantfile 文件即可,然后在当前目录执行 vagrant up 命令,很快就可以拿到 3 台虚拟机。
  执行 vagrant status 可以得到 3 台虚拟机的状态:
  [code]node1                     running (virtualbox)
node2                     running (virtualbox)
node3                     running (virtualbox)[/code]  在这里虚拟机的 IP 分别是:
  [code]node1 192.168.56.101
node2 192.168.56.102
node3 192.168.56.103[/code]  2. 初始化 ubuntu 服务器,安装 docker 服务

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

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

  [code]wget https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.4.0/kubernetes.tar.gz
tar -xvf kubernetes.tar.gz
# 修改配置文件的以下几行
vi kubernetes/cluster/ubuntu/config-default.sh

export nodes=${nodes:-"[email protected] [email protected] [email protected]"}
roles=${roles:-"ai i i"}
export NUM_NODES=${NUM_NODES:-3}

cd kubernetes/cluster
# 这个需要特殊处理,否则默认官方流程会报错,缺少文件,这些文件需要先解压。
cp -a ../server/kubernetes/saltbase .
cp ../server/bin/kubectl /usr/bin/[/code]  5. 启动 kubernetes 集群

  [code]KUBERNETES_PROVIDER=ubuntu ./kube-up.sh[/code]  启动过程的输出信息如下:
  [code]Deploying master and node on machine 192.168.56.101
make-ca-cert.sh                                                                                                                          100% 4136     4.0KB/s   00:00
easy-rsa.tar.gz                                                                                                                          100%   42KB  42.4KB/s   00:00
config-default.sh                                                                                                                        100% 5595     5.5KB/s   00:00
util.sh                                                                                                                                  100%   29KB  28.9KB/s   00:00
kubelet.conf                                                                                                                             100%  645     0.6KB/s   00:00
kube-proxy.conf                                                                                                                          100%  688     0.7KB/s   00:00
kubelet                                                                                                                                  100% 2158     2.1KB/s   00:00
kube-proxy                                                                                                                               100% 2233     2.2KB/s   00:00
kube-controller-manager.conf                                                                                                             100%  761     0.7KB/s   00:00
kube-scheduler.conf                                                                                                                      100%  682     0.7KB/s   00:00
kube-apiserver.conf                                                                                                                      100%  682     0.7KB/s   00:00
etcd.conf                                                                                                                                100%  707     0.7KB/s   00:00
kube-apiserver                                                                                                                           100% 2358     2.3KB/s   00:00
kube-scheduler                                                                                                                           100% 2360     2.3KB/s   00:00
etcd                                                                                                                                     100% 2073     2.0KB/s   00:00
kube-controller-manager                                                                                                                  100% 2672     2.6KB/s   00:00
reconfDocker.sh                                                                                                                          100% 2082     2.0KB/s   00:00
etcdctl                                                                                                                                  100%   14MB  13.7MB/s   00:00
kube-apiserver                                                                                                                           100%  144MB  72.1MB/s   00:02
kube-scheduler                                                                                                                           100%   77MB  77.0MB/s   00:01
etcd                                                                                                                                     100%   16MB  15.9MB/s   00:00
flanneld                                                                                                                                 100%   16MB  15.8MB/s   00:00
kube-controller-manager                                                                                                                  100%  135MB 134.5MB/s   00:01
kubelet                                                                                                                                  100%  123MB  61.4MB/s   00:02
kube-proxy                                                                                                                               100%   69MB  69.5MB/s   00:01
flanneld                                                                                                                                 100%   16MB  15.8MB/s   00:00
flanneld.conf                                                                                                                            100%  579     0.6KB/s   00:00
flanneld                                                                                                                                 100% 2121     2.1KB/s   00:00
flanneld.conf                                                                                                                            100%  570     0.6KB/s   00:00
flanneld                                                                                                                                 100% 2131     2.1KB/s   00:00
etcd start/running, process 5093
etcd cluster has no published client endpoints.
Try '--no-sync' if you want to access non-published client endpoints(http://127.0.0.1:2379,http://127.0.0.1:4001).
Error:  client: no endpoints available
etcd cluster has no published client endpoints.
Try '--no-sync' if you want to access non-published client endpoints(http://127.0.0.1:4001,http://127.0.0.1:2379).
Error:  client: no endpoints available
Error:  100: Key not found (/coreos.com) [24]
{"Network":"172.16.0.0/16", "Backend": {"Type": "vxlan"}}
{"Network":"172.16.0.0/16", "Backend": {"Type": "vxlan"}}
docker stop/waiting
docker start/running, process 5314
Connection to 192.168.56.101 closed.

Deploying node on machine 192.168.56.102
config-default.sh                                                                                                                        100% 5595     5.5KB/s   00:00
util.sh                                                                                                                                  100%   29KB  28.9KB/s   00:00
reconfDocker.sh                                                                                                                          100% 2082     2.0KB/s   00:00
kubelet.conf                                                                                                                             100%  645     0.6KB/s   00:00
kube-proxy.conf                                                                                                                          100%  688     0.7KB/s   00:00
kubelet                                                                                                                                  100% 2158     2.1KB/s   00:00
kube-proxy                                                                                                                               100% 2233     2.2KB/s   00:00
kubelet                                                                                                                                  100%  123MB  61.4MB/s   00:02
kube-proxy                                                                                                                               100%   69MB  69.5MB/s   00:01
flanneld                                                                                                                                 100%   16MB  15.8MB/s   00:01
flanneld.conf                                                                                                                            100%  579     0.6KB/s   00:00
flanneld                                                                                                                                 100% 2121     2.1KB/s   00:00
flanneld start/running, process 3891
docker stop/waiting
docker start/running, process 4055
Connection to 192.168.56.102 closed.

Deploying node on machine 192.168.56.103
config-default.sh                                                                                                                        100% 5595     5.5KB/s   00:00
util.sh                                                                                                                                  100%   29KB  28.9KB/s   00:00
reconfDocker.sh                                                                                                                          100% 2082     2.0KB/s   00:00
kubelet.conf                                                                                                                             100%  645     0.6KB/s   00:00
kube-proxy.conf                                                                                                                          100%  688     0.7KB/s   00:00
kubelet                                                                                                                                  100% 2158     2.1KB/s   00:00
kube-proxy                                                                                                                               100% 2233     2.2KB/s   00:00
kubelet                                                                                                                                  100%  123MB  61.4MB/s   00:02
kube-proxy                                                                                                                               100%   69MB  69.5MB/s   00:01
flanneld                                                                                                                                 100%   16MB  15.8MB/s   00:00
flanneld.conf                                                                                                                            100%  579     0.6KB/s   00:00
flanneld                                                                                                                                 100% 2121     2.1KB/s   00:00
flanneld start/running, process 2266
docker stop/waiting
docker start/running, process 2433
Connection to 192.168.56.103 closed.
Validating master
Validating [email protected]
Validating [email protected]
Validating [email protected]
Using master 192.168.56.101
cluster "ubuntu" set.
user "ubuntu" set.
context "ubuntu" set.
switched to context "ubuntu".
Wrote config for ubuntu to /home/vagrant/.kube/config
... calling validate-cluster
Found 3 node(s).
NAME             STATUS    AGE
192.168.56.101   Ready     36s
192.168.56.102   Ready     22s
192.168.56.103   Ready     12s
Validate output:
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health": "true"}
Cluster validation succeeded
Done, listing cluster services:

Kubernetes master is running at http://192.168.56.101:8080

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.[/code]  6. 至此 Kubernetes 集群已经启动成功

  根据提示信息,可以在浏览器打开 http://192.168.56.101:8080 查看 Kubernetes 的 API 已经可以访问了。
  [code]# 查看机器状态
kubectl get nodes
NAME             STATUS    AGE
192.168.56.101   Ready     1m
192.168.56.102   Ready     59s
192.168.56.103   Ready     49s[/code]  各台服务器的 Kubernetes 相关进程:
  [code]# node1:

/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
/opt/bin/kube-scheduler --logtostderr=true --master=127.0.0.1:8080
/opt/bin/flanneld --etcd-endpoints=http://127.0.0.1:4001 --ip-masq --iface=192.168.56.101
/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
/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
/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
/opt/bin/kube-proxy --hostname-override=192.168.56.101 --master=http://192.168.56.101:8080 --logtostderr=true
/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

# node2:

/opt/bin/flanneld --etcd-endpoints=http://192.168.56.101:4001 --ip-masq --iface=192.168.56.102
/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
/opt/bin/kube-proxy --hostname-override=192.168.56.102 --master=http://192.168.56.101:8080 --logtostderr=true
/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[/code]  基本可以看出 Kubernetes 的各个部件 etcd,kube-scheduler,flanneld,kube-apiserver,kube-controller-manager,kubelet,kube-proxy,dockerd 和他们之间的关系。
  7. 至此 Kubernetes 安装成功

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

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

  [code]node1                     running (virtualbox)
node2                     running (virtualbox)
node3                     running (virtualbox)3[/code]  10. 销毁之前的 3 台本地虚拟机

  [code]node1                     running (virtualbox)
node2                     running (virtualbox)
node3                     running (virtualbox)4[/code]    注册 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-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表