使用kubeadm安裝kubernetes

這是一種最快的方法向你展示如何簡單在在你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 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

只出現這,一直沒有後續輸出和安裝完成提示,等了一夜也沒有,後來直接無視這步操作,依然是成功,暫時沒有發現問題,可以在實驗階段先忽視這個問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章