手動安裝Kubernetes(二)啟動服務

本文適合完全沒有基礎的新手,指令只要複製、貼上即可運作
環境:
  - Ubuntu 16.04 
  - Kubernetes 1.6
  - Docker 1.12.6

接續上文
再來就把binary複製到對應的目錄
  cp ~/kube-bin/* /opt/bin/
  cp ~/kube-bin/kubectl /usr/local/bin/
  chmod 744 -R /opt/bin/
  chmod 744 -R /usr/local/bin/
    
  export PATH=$PATH:/opt/bin
這是不分master, minions的懶人複製法

MASTER
--------------------------------------------------------------------
- 建立憑證(Master)
  vim /srv/kubernetes/openssl.conf
複製以下內容
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]

[v3_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

#List of Subject Alternate Names the server will be known as - list out short and FQDN versions
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = huff-kubmst01
DNS.6 = huff-kubmst01.huffnet.org
DNS.7 = kubmst01
DNS.8 = kubmst01.huffnet.org
IP.1 = ${cluster_ip}
#it's kubernetes cluster ip NOT master ip
#Add more IPs if your server will serve on multiple IPs like IP.2, IP.3, etc
*${cluster_ip} :
輸入 :
  kubectl get svc
就可以得到service的cluster ip
  NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   172.112.0.1   <none>        443/TCP   2m

接著執行
 cd /srv/kubernetes
 openssl genrsa -out ca.key 2048   
 openssl req -x509 -new -nodes -key ca.key -subj "/CN=kubernetes" -days 10000 -out ca.crt -config openssl.conf
 openssl genrsa -out server.key 2048
 openssl req -new -key server.key -subj "/CN='kubernetes'" -out server.csr         
 openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.cert -days 10000 -extensions v3_req -extfile openssl.conf



- 下一步,啟動daemons(Master)
  systemctl enable kube-apiserver.service
  systemctl enable kube-controller-manager.service
  systemctl enable kube-scheduler.service
        
  systemctl enable flanneld.service
  systemctl enable etcd.service
  systemctl start etcd.service

使用vxlan的架構
/opt/bin/etcdctl --endpoints="http://${1}:2379" mk /coreos.com/network/config '{"Network":"192.128.0.0/16", "Backend": {"Type": "vxlan"}}'
 ${1}是master ip


- 網路設定(Master/Minions) 
有點複雜,請一步步跟著做
先用ifconfig,確認docker0是否有ip
  ifconfig
如果不知道怎麼確認,照這個key
  ifconfig docker0 0

啟動flannel
  systemctl start flanneld

然後,去找flannel的subnet
  ifconfig
  flannel.1 Link encap:Ethernet  HWaddr 96:c1:3e:c2:89:90
          inet addr:192.112.74.0  Bcast:0.0.0.0  Mask:255.255.0.0
                 . . . . 
記得上一篇有個還沒設定的<FLANNEL_SUBNET> 嗎?以這個例子就是填入192.168.74.1/24


接下來就輕鬆啦,把各個daemon啟動就好了
  systemctl daemon-reload
  systemctl restart docker.service
  systemctl start kube-apiserver.service
  systemctl start kube-controller-manager.service
  systemctl start kube-scheduler.service

可以去確認process有沒有都跑起來
  ps aux | grep kube


MINION/NODE
--------------------------------------------------------------------
- 啟動daemons
  systemctl enable kubelet.service
  systemctl enable kube-proxy.service
  systemctl enable flanneld.service
  systemctl enable docker.service

接下來,一樣是flannel網路設定,請參照上一段

然後就把daemons叫起來就好囉!
  systemctl daemon-reload
  systemctl restart docker.service
  systemctl start kubelet.service
  systemctl start kube-proxy.service

可以去確認process有沒有都跑起來
  ps aux | grep kube

 --------------------------------------------------------------------

安裝完後,在master上執行 kubectl get node 就可以看到node的資訊,如果找不到kubectl這個指令,那就是環境變數沒有設定好,直接執行
/usr/local/bin/kubectl get node

應該可以看到類似這樣:
    NAME          STATUS    AGE       VERSION
10.62.112.11     Ready     1m          v1.6.0


Trouble shooting...
一般來說都是網路上的設定出了問題(眼殘或手殘 XD), 可以藉由系統log來找問題
  tail -f /var/log/syslog -n 100
或是
在kubernetes主體的log,在設定檔有指向/var/log/kubernetes,所以可以進來找,例如,下面是去找kube-apiserver的error log
  tail -f /var/log/kubernetes/kube-apiserver.ERROR -n 100


幾個常用的kubectl指令
kubectl get node --> 取得node 資訊
kubectl get po   --> 取得pod 資訊
kubectl get svc --namespace=kube-system --> 取得在namespace=kube-system中service的資訊
kubectl get po --all-namespaces  -->取得所有namespace的pod資訊


眼尖的朋友應該有注意到,上篇設定檔中,很多用${1}的地方,其實這都是從我寫的shell script中複製下來的,所以這兩篇的內容,其實都可以直接複製下來,寫成一個script,之後就不用一個個在那邊vim....

留言

這個網誌中的熱門文章

What's New in Ethereum Serenity (2.0)

瑞士滑雪分享2 - 策馬特

動手實做零知識 - circom