您的位置:首页 > 运维架构 > Linux

使用kubeadm安装kubernetes

2016-09-28 12:05 831 查看
这是一种最快的方法向你展示如何简单在在你Ubuntu16.04或者Centos的机器的安装Kubernetes。这次使用的安装工具是Kubernetes1.4组件叫做kubeadm。

Kubernetes可以工作在本地虚拟机,物理服务器或者云服务器。Kubernetes简单到一体化傻瓜部署。

简单到翻墙倒是部署Kubernetes最难的一步了。

先翻墙吧,不然是个极其痛苦的过程。全程翻墙操作!!!

翻墙传送门

安装之中难免出现小问题,按部就班,解决不了,文章附录我自己遇到的问题和解决方案,可供参考:

安装要求:

1.一台或者多台装有Ubuntu 16.04 or CentOS 7的电脑或者虚拟机。

2.至少1GB RAM

3.公网或者内网可联通

安装步骤

(1/ 4):在你的主机上安装kubelet和kubeadm

我们将会安装下面几个包:

docker: the container runtime, which Kubernetes depends on.

kubelet: the most core component of Kubernetes. It runs on    all of the machines in your cluster and does things like     starting pods and containers.

kubectl: the command to control the cluster once it’s running. You will only use this on the master.

kubeadm: the command to bootstrap the cluster.

在你拥有的每台机器上进行如下操作:

使用ssh登陆你的机器,并获得root权限(su root)

在Ubuntu16.04:

# curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y docker.io kubelet kubeadm kubectl kubernetes-cni


在CentOS7:

# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF
# setenforce 0
# yum install -y docker kubelet kubeadm kubectl kubernetes-cni
# systemctl enable docker && systemctl start docker
# systemctl enable kubelet && systemctl start kubelet


现在的kubelet每几秒重启一次,它在等待kubeadm告诉它做什么。

(2 / 4):初始化你的master

msater是你运行组件“control plane”那台机器,包括etcd(集群数据库)和API服务(kubelet和此进行交互)。所有这些组件运行在被kubelet启动的pods上,为了初始化master,选择一台你之前安装了kubelet和kubeadm的机器上,运行如下命令:

# kubeadm init


上面的命令会下载并且安装集群数据库和“control plane”组件,这将花费一段时间,完成之后会输出如下结果:

<master/tokens> generated token: "f0c861.753c505740ecde4c"
<master/pki> created keys and certificates in "/etc/kubernetes/pki"
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
<util/kubeconfig> created "/etc/kubernetes/admin.conf"
<master/apiclient> created API client configuration
<master/apiclient> created API client, waiting for the control plane to become ready
<master/apiclient> all control plane components are healthy after 61.346626 seconds
<master/apiclient> waiting for at least one node to register and become ready
<master/apiclient> first node is ready after 4.506807 seconds
<master/discovery> created essential addon: kube-discovery
<master/addons> created essential addon: kube-proxy
<master/addons> created essential addon: kube-dns

Kubernetes master initialised successfully!

You can connect any number of nodes by running:

kubeadm join --token <token> <master-ip>


记住kubeadm init 输出的kubeadm join 的命令,接下来你将会用到。这个秘钥必须保密,否则任何人都能加入你集群,并进行破坏。

这个秘钥是master和node 用来互相验证身份的识别卡。默认情况下,出于安全考虑,你的集群不会在master上创建pods 。如果你想在master创建pods,运行如下命令:

# kubectl taint nodes --all dedicated-
node "test-01" tainted
taint key="dedicated" and effect="" not found.
taint key="dedicated" and effect="" not found.


这会告诉集群可以创建pods 在任何地方包括master。

(3 / 4)加入你的nodes

nodes 是你pods和container的运行的地方。如果你想增加新的机器作为nodes加入你的集群,用ssh 进入每天机器并获得root权限,并运行如下命令:

# kubeadm join --token <token> <master-ip>
<util/tokens> validating provided token
<node/discovery> created cluster info discovery client, requesting info from "http://138.68.156.129:9898/cluster-info/v1/?token-id=0f8588"
<node/discovery> cluster info object received, verifying signature using given token
<node/discovery> cluster info signature and contents are valid, will use API endpoints [https://138.68.156.129:443]
<node/csr> created API client to obtain unique certificate for this node, generating keys and certificate signing request
<node/csr> received signed certificate from the API server, generating kubelet configuration
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"

Node join complete:
* Certificate signing request sent to master and response
received.
* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on the master <
c335
span class="hljs-title">to see this machine join.


几秒之后,当你在masters上运行 kubectl get nodes 你会发现很多机器出现了。

注意:你的集群到此还未部署完成!

在你部署一个应用值钱,你需要安装pod network.

(4 / 4)安装 pod network

你必须安装一个 pod network 以便让你的运行在不同主机上的pods之间可以进行通信,这是你部署任何一个应用到你的集群上所必须做的事情。几个工程提供了Kubernetes pod networks,你可以看完整的清单在add-ons page.

举个例子,你可以登陆master安装 Wave Net :

# kubectl apply -f https://git.io/weave-kube daemonset "weave-net" created


一旦一个pod network ,你可以通过运行 kubectl get pods –all-namespaces

查看是否生效,running 表示你的集群已经准备好了。

安装一个小应用:

作为一个例子:安装一个小应用放入你的集群:

# git clone https://github.com/microservices-demo/microservices-demo # kubectl apply -f microservices-demo/deploy/kubernetes/manifests


你可以查看 NodePort feature of services分配的端口值:

# kubectl describe svc front-end
Name:                   front-end
Namespace:              default
Labels:                 name=front-end
Selector:               name=front-end
Type:                   NodePort
IP:                     100.66.88.176
Port:                   <unset> 80/TCP
NodePort:               <unset> 31869/TCP
Endpoints:              <none>
Session Affinity:       None


这将会花费几分钟下载和开始容器,通过看kubectl get pods来看他们是否都已经启动完毕并且运行了。用浏览器进入master IP地址,和被分配的端口。比如http://:  在上面个例子:端口是31869,你的端口可能不同。如果有防火墙,连接之前记得开放端口。

一个更简洁的安装方案

有个简洁的安装方案,为什么还要使用上面的方法,我认为下面介绍虽然更简单,但是不能让你熟悉了解组件之间的关系,换言之,上面的方法虽然有些多但是让你对Kubernetes有个初步的认识。另外下面的方法虽然比上面的方法更简单,但是还是要翻墙。另外还有直接下载压缩包的方法我就不介绍了,反正我这是根本下载不下来,不管你翻不翻墙。直接运行如下命令:

git clone https://github.com/kubernetes/kubernetes.git cd kubernetes
make release


更多操作细节,在下载文件下的build目录中,自行查看。

问题与解决:

本人亲自安装时发现两个问题:

1.使用sudo docker ps 或者其他kubeadm会提示发现不了主机,询问docker是否运行在这台主机上?

我是关机重启之后出现这个问题的。

解决方案:据我所知应该是docker引擎被卸载了或者是被Kubernetes配置更改了,重新安装一次就好了,更深次的原因我还没有发现。

前提是docker值钱依赖和源都更新好,并且安装好docker引擎再出现上面的问题。

$ sudo apt-get install docker-engine

运行上面的问题就可以解决了。

2.(2 / 4):初始化你的master在这一步中运行# kubeadm init

<master/tokens> generated token: "f0c861.753c505740ecde4c"
<master/pki> created keys and certificates in "/etc/kubernetes/pki"
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
<util/kubeconfig> created "/etc/kubernetes/admin.conf"
<master/apiclient> created API client configuration
<master/apiclient> created API client, waiting for the control plane to become ready


只出现这,一直没有后续输出和安装完成提示,等了一夜也没有,后来直接无视这步操作,依然是成功,暂时没有发现问题,可以在实验阶段先忽视这个问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息