1. 程式人生 > >在Openstack上建立並訪問Kubernetes叢集_Kubernetes中文社群

在Openstack上建立並訪問Kubernetes叢集_Kubernetes中文社群

第一部分:建立叢集

Openstack部署Kubernetes叢集執行Nginx容器的步驟,其中包括:

  • 利用Murano部署Kubernetes叢集
  • 配置Openstack的安全性使Kubernetes叢集可以在Openstack使用
  • 下載並配置kubernetes客戶端
  • 建立Kubernetes應用程式
  • 在Kubernetes上執行應用程式

現在讓我們開始:

利用Murano建立Kubernetes叢集

第一步是建立kubernetes叢集。有幾種方法都可以做到這一點,但是最簡單的方式是通過部署Mirantis Openstack平臺與Murano元件實現。

匯入Kubernetes叢集應用

第一步在Openstack社群的應用目錄中獲取Kubernetes叢集應用,遵循以下步驟:

1、登入Horizon,進入Applications->Manage->Packages.

2、進入社群應用目錄並且選擇Murano Apps->Kubernetes Cluster獲取Kubernetes叢集應用,找到應用包本身的URL:http://storage.apps.openstack.org/apps/com.mirantis.docker.kubernetes.KubernetesCluster.zip.

3、回到Horizon介面,點選Import Package。

4、在Package Source選擇URL並且新增第二步的URL地址然後點選下一步:

importmuranopackage

5、Murano自動開始下載應用所需的映象,然後將其標記為為Murano使用;你無需做任何操作只需點選‘Import’後等待。點選Project->Images檢視下載中的映象狀態顯示為‘儲存中’:

savingimages

6、一旦他們完成儲存,你可以看到映象狀態變為‘Active’:

availableimages

接下來,我們將部署包Kubernetes master和minions的環境。

在Murnao環境下建立Kubernetes

1、在Horizon介面,選擇Applications->Browse.,你可以在Recent Activity下看到新的應用。

recentactivity

2、為了簡化步驟,點選Quick Deploy直接進行快速部署。

quickdeploy

3、選項預設值,點選下一步。

quickdeploy2

4、選擇Debian映象點選建立。

create

5、自動進入Environment介面,此時應用已經建立但並沒有部署:

6、點選‘Deploy This Environment’,在此過程中進行一系列操作:建立VMs,網路,安全組等。你可以在主環境頁面檢視日誌:

deploying

7、當部署完成後,你可以檢視狀態變為Ready:

deploymentready

8、那麼你從哪裡可以訪問叢集呢?點選‘Latest Deployment Log’檢視叢集分配的IP地址:

現在你可以注意到4個不同的節點:閘道器-1,kube-1,kube-2和kube-3。點選Project->Compute->Instances檢視這些例項,Kubernetes API執行在Kube-1上。

第二部分:訪問叢集

為了訪問在第一部分建立的kubernetes叢集,我們先建立Ubuntu VM(如果已經有Ubuntu機器可以忽略)然後進行配置來訪問剛剛部署的Kubernetes API。

建立客戶端VM

1. 點選Project->Compute->Intances->Launch Instance建立新的VM:

launch_instance

2. 你無須擔心獲取映象,因為你已經有了Ubuntu Kubernetes映象作為Murano應用的一部分下載完成了。點選‘+’選擇。(你也可以選擇其他的發行版)。

images

3. 你需要為Ubuntu映象選擇足夠大的雲主機型別,所以至少選擇m1.small雲主機型別:

4. 網路可以選擇叢集已有的網路,但是沒有關係,我們都是利用浮動IP,只要確保它在網路上。

networks

5. 接下來確保你有金鑰對,因為我們需要它來登入機器:

keypair

6. 建立完成

7. 點選例項的下拉按鈕選擇繫結浮動IP,如果沒有分配的浮動IP地址,點選‘+’分配一個新的浮動IP地址:

8. 選擇合適的網路並且點選分配IP:

associate

9. 將浮動IP繫結到VM上:

10. 你將看到例項上列出的新的浮動IP

newfloatingiponinstance

11. 在登入之前,需要確保安全組允許SSH訪問,點選Project->Compute->Access & Security選擇預設安全組的管理規則選單:

accessandsecurity

12. 點選+新增規則:

13. 在Rule嚮導中選擇SSH並點選Add:

addrule2

14. 在管理規則頁面會看到新增的新的規則:

managerules

15. 現在使用SSH客戶端通過設定的使用者名稱和私鑰訪問建立的VM

現在你可以在叢集中部署容器了。

第三部分:執行應用

在第二部分,你已經建立的叢集,那麼最後你可以準備與Kubernetes API實現互動,一般過程如下:

  • 為訪問你的應用定義安全的身份認證
  • 在叢集中部署容器化應用
  • 將應用暴露到外部環境提供訪問

現在讓我們來看看是如何操作。

為你的Kubernetes應用定義安全引數

你需要了解的第一件事是,我們有一組機器與Kubernetes API綁在一起,它可以支援多種環境,每個都有自己的安全憑證。

例如,如果你要建立依賴於特定認證授權的應用程式,我也可以建立依賴於另一個認證授權的應用,我們可以各自控制自己的應用,但是不能看到對方的應用。

1.首先我們需要建立一個新的認證憑證用來簽發其他的證書。採用以下命令建立:

$ sudo openssl genrsa -out ca-key.pem 2048
$ sudo openssl req -x509 -new -nodes -key ca-key.pem -days 10000 \
-out ca.pem -subj "/CN=kube-ca"

2. 這時你應該有兩個檔案:ca-key.pem和ca.pem,你可以用他們來建立叢集管理員金鑰對。為此,你將建立私鑰(admin-key.pem),之後建立一個認證簽名請求(admin.csr),然後簽名以建立公鑰(admin.pem)。

$ sudo openssl genrsa -out admin-key.pem 2048
$ sudo openssl req -new -key admin-key.pem -out admin.csr -subj "/CN=kube-admin"
$ sudo openssl x509 -req -in admin.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial \
-out admin.pem -days 365

現在你有了這些檔案,就可以利用他們來配置kubernetes客戶端。

下載並配置Kubernetes客戶端

1. 在機器上開始下載kubectl客戶端,此場景我們採用Linux,根據你的OS選擇合適的方式。

$ curl -O \
https://storage.googleapis.com/kubernetes-release/release/v1.4.3/bin/linux/amd64/kubectl

2. 設定kubectl為可執行:

$ chmod +x kubectl

3. 將它移到本地目錄:

$ sudo mv kubectl /usr/local/bin/kubectl

4. 現在開始設定預設叢集,你需要使用從環境部署的日誌中獲取的URL,此外確保你提供ca.pem檔案的絕對路徑。

$ kubectl config set-cluster default-cluster --server=[KUBERNETES_API_URL] \
--certificate-authority=[FULL-PATH-TO]/ca.pem

5. 接下來你需要告知kubectl如何找到認證:

$ kubectl config set-credentials default-admin \
--certificate-authority=[FULL-PATH-TO]/ca.pem \
--client-key=[FULL-PATH-TO]/admin-key.pem \
--client-certificate=[FULL-PATH-TO]/admin.pem

6. 現在你需要設定環境讓kubectl知道去使用這些認證:

$ kubectl config set-context default-system --cluster=default-cluster --user=default-admin
$ kubectl config use-context default-system

7. 現在你應該能夠看見叢集資訊:

$ kubectl cluster-info

Kubernetes master is running at http://172.18.237.137:8080
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

在kubernetes上執行應用

在kubernetes上執行應用十分簡單,涉及容器的啟動。我們之後會做詳細介紹。

1.開始建立Nginx web server的部署:

$ kubectl run my-nginx --image=nginx --replicas=2 --port=80
deployment "my-nginx" created

2. 預設容器只有叢集的成員可見,為了將服務暴露給外部網路,執行以下命令:

$ kubectl expose deployment my-nginx --target-port=80 --type=NodePort
service "my-nginx" exposed

3. 我們使用了NodePort型別,這意味著外部IP是正在執行的節點IP,你可以檢視是否獲取了服務列表:

$kubectl get services

NAME         CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   11.1.0.1      <none>        443/TCP   3d
my-nginx     11.1.116.61   <nodes>       80/TCP    18s

4. 這裡引用的節點是kube-2和kube-3(Kube-1是API伺服器),我們可以從例項頁面獲取它們的IP地址:

kube123

5. 但是服務列表中並沒有告訴我們實際的埠數,為了獲取實際埠數,可以執行以下命令:

$ kubectl describe services my-nginx
Name:                   my-nginx
Namespace:              default
Labels:                 run=my-nginx
Selector:               run=my-nginx
Type:                   NodePort
IP:                     11.1.116.61
Port:                   <unset> 80/TCP
NodePort:               <unset> 32386/TCP
Endpoints:              10.200.41.2:80,10.200.9.2:80
Session Affinity:       None
No events.

6. 這樣服務在埠32386可用,但是如果你嘗試訪問它會發現失敗:

$ curl http://172.18.237.138:32386

curl: (7) Failed to connect to 172.18.237.138 port 32386: Connection timed out

7. 預設情況下會出現上述問題,因為這個埠被預設的安全組關閉,為了解決這個問題,需要建立新的安全組適用於kubernetes節點,點選Project->Compute->Access& Security->+Create Security Group。

8. 定義組名稱點選‘建立安全組’。

9. 點選步驟8建立的安全組的‘管理規則’:

10. 點選‘+Add Rule’:

addrule

11. 此例中我們自定義TCP規則執行在埠32386(或者kubernetes在NodePort中分配的埠)的入口流量,你可以定義僅從特定的IP地址訪問,點選‘Add’完成規則的新增。

addrule2

12. 現在你可以將上述步驟設定的安全組新增到kubernetes叢集中作為工作節點的例項中(kube-2和kube-3節點),點選每個例項行末的小三角選擇‘編輯安全組’。

13. 在左邊面板可以看到之前建立新的安全組;點選‘+’將它新增到例項中:

14. 點選‘儲存’。

15. 為叢集的所有工作節點新增安全組。

$ curl http://172.18.237.138:32386
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

16. 現在你可以重新嘗試訪問。

正如圖所示,現在你可以訪問部署在Kubernetes叢集的Nginx容器。

原文部落格:https://www.mirantis.com/blog/