1. 程式人生 > 其它 >Kubernetes實踐技巧:Windows 系統最佳實踐

Kubernetes實踐技巧:Windows 系統最佳實踐

有部分同學是使用的 Windows 系統,我們的直播課程也是在 Windows 系統下面進行的,然後通過 SSH 方式連線到 伺服器上面操作 Kubernetes,由於對 vim 不是很熟悉,所以又通過 sftp 的方式在本地編寫資源清單檔案同步到伺服器上面執行的,這個過程比較繁瑣,效率不高。下面就來介紹下在 Windows 系統下面配置 kubectl 的實踐方式,當然如果你是 Mac 或者 Linux,思路基本都是一致的。

kubectl 配置

首先,下載 Windows 版本的 kubectl 二進位制檔案,地址:https://dl.k8s.io/v1.16.2/kubernetes-client-windows-amd64.tar.gz。

由於上面下載連結需要kexue上網,所以我這裡離線放到到了百度網盤上,可以直接下載:
連結:https://pan.baidu.com/s/1w_2s3mzf1OWSlvgVZFssCA
提取碼:fxbc

將 kubectl 二進位制檔案下載到本地,解壓到目錄:D:\apps\kubernetes 下面,然後設定該目錄到 PATH 路徑下面,操作步驟如下所示:

這樣設定完成後就可以在終端中直接直接 kubectl 命令了。現在只需要配置 kubeconfig 檔案就可以訪問我們的 Kubernetes 叢集了。

首先建立 .kube 目錄:

$ mkdir ~/.kube  # 對應目錄: C:\Users\Admin\.kube

然後將伺服器上面的 kubeconfig(~/.kube/config)檔案複製到 Windows 下面的 ~/.kube 目錄下面,但是需要注意的是伺服器上面的kubeconfig配置檔案裡面的 apiserver 地址是內網地址,所以我們把這裡的地址改成外網IP,儲存,然後測試 kubectl 命令:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"windows/amd64"}
Unable to connect to the server: x509: certificate is valid for 10.96.0.1, 10.151.30.11, not 123.59.188.11

我們可以看到會提示證書錯誤,大概意思就是服務端的證書沒有包含我們的外網 IP,所以我們通過外網 IP 去訪問就證書校驗失敗了,這個時候怎麼辦呢?要解決這個問題主要有兩個方法:

第一個就是在我們最開始初始化叢集的時候通過 kubeadm 的配置檔案指定引數 apiServerCertSANs 的時候,將外網IP也包含著裡面,但是我們叢集已經安裝好了,這個方法肯定不適用了。

第二個方法我們去伺服器上面看看我們的 apiserver 證書的詳細資訊:

$ openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9203698167925060590 (0x7fba1ab86f1633ee)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=kubernetes
        ......
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage:
                TLS Web Server Authentication
            X509v3 Subject Alternative Name:
                DNS:ydzs-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.96.0.1, IP Address:10.151.30.11
    Signature Algorithm: sha256WithRSAEncryption
         01:1a:63:1a:f8:4e:f4:cd:7c:79:4b:64:2d:4e:a3:5a:13:80:
         13:60:ca:46:ee:2d:3e:61:51:15:45:19:23:2a:09:d9:46:b3:
        ......

我們仔細看上面 DNS 區域就是包含的校驗的域名,後面還有 IP,是不是其中就有我們的 master 節點的 hostname(ydzs-master),到這裡大家想到方法了嗎?

我們是不是可以直接在本地的 /etc/hosts 裡面做一個 APIServer 的外網 IP -> ydzs-master 的對映,然後在本地的 kubeconfig 檔案中把 apiserver 地址替換成 https://ydzs-master:6443 是不是就 OK了啊。

所以接下來直接在本地修改 hosts 對映即可,要注意用管理員身份開啟檔案C:\Windows\System32\drivers\etc\hosts,然後在檔案裡面新增一行對映:

# localhost name resolution is handled within DNS itself.
#    127.0.0.1       localhost
#    ::1             localhost
123.59.188.11 ydzs-master

然後儲存即可。這個時候我們再到 powershell 中去執行下 kubectl 命令呢:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:09:08Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}

是不是全都 OK 了呀~

IDE 配置

當然 kubectl 工具配置好以後,我們就可以直接操作叢集了,隨便用什麼工具編寫 YAML 清單檔案操作都可以,當然為了更好的實踐方式,可以選擇一些比較順手的工具,比如 vscode 之類的編輯器,我這裡使用的是 Goland 這個 IDE。對於 Idea 的 IDE 都可以一樣的操作。

  • 為了頁面美觀,可以安裝一個 Material Theme UI 的主題外掛
  • 為了編寫 YAML 檔案方便,還需要安裝一個名為 kubernetes 的外掛,這樣我們在編寫資源清單的時候就可以自動提示了
  • 更改預設的 IDE 的 terminal 為 Powershell:open File=>Setting=>Tools=>Terminal, 將cmd.exe修改為powershell.exe儲存,重啟 IDE 即可。

最終的配置效果如下圖所示: