Nutanix CE の Karbon で 作成した Kubernetes に、Karbon とは関係ない Linux から Kubectl で接続してみます。Karbon で作成される Kubernetes クラスタは、一般的な Kubernetes であり、kubectl のような標準的なツールで操作できます。
- 今回の環境
- Linux クライアントでの kubectl の準備
- Karbon で作成した Kubernetes クラスタの kubeconfig 入手
- kubectl での Kubernetes クラスタへの接続
- おまけ
今回の環境
Karbon の有効化と Kubernetes クラスタ作成は、下記のように実施ずみです。
Karbon で作成した Kubernetes クラスタでは、Master ノードに kubectl がインストールされますが、あまり Master ノードに直接ログインするのは好ましくないと思います。
また、Karbon では Kubernetes ノードの OS イメージをアップデートすることがありますが、その際に独自で配置したファイルはなくなるので、あまり Master ノードをクライアント環境として作りこまない方がよさそうです。
そこで、あえて別の Linux クライアントを用意して Kubernetes クラスタを操作します。
Linux クライアントは、Oracle Linux 7 を利用します。
[root@lab-vm-02 ~]# cat /etc/system-release Oracle Linux Server release 7.9
Linux クライアントでの kubectl の準備
RHEL / CentOS / Oracle Linux では、デフォルトで $HOME/bin ディレクトリにコマンドのサーチ パスが設定されています。そこで、$HOME/bin ディレクトリを作成して、そこに kubectl を配置します。
$HOME/bin ディレクトリを作成します。
[gowatana@lab-vm-02 ~]$ echo $HOME/bin /home/gowatana/bin [gowatana@lab-vm-02 ~]$ mkdir $HOME/bin
kubectl をダウンロードして、実行権限(+x)を付与しておきます。kubectl のバージョンは、Kubernetes クラスタのバージョンに合わせました。
[gowatana@lab-vm-02 ~]$ curl -s -o $HOME/bin/kubectl -L https://storage.googleapis.com/kubernetes-release/release/v1.16.8/bin/linux/amd64/kubectl [gowatana@lab-vm-02 ~]$ chmod +x $HOME/bin/kubectl
kubectl が実行できるようになりました。
[gowatana@lab-vm-02 ~]$ kubectl version --short --client Client Version: v1.16.8
Karbon で作成した Kubernetes クラスタの kubeconfig 入手
Prism Central にある Karbon の画面で、Kubernetes クラスタを選択して、「Actions」→「Download Kubeconfig」を開きます。
「Download」リンクで kubeconfig ファイルをダウンロードできます。しかし、今回は 「Copy the command to clipboard」でクリップ ボードにコピーします。
クリップ ボードにコピーされた長い文字列を、kubectl を実行する Linux クライアントのターミナルに貼り付けて Enter キーを押します。
kubeconfig ファイル(クラスタ名.cfg)が作成されます。そして環境変数「KUBECONFIG」に、kubeconfig ファイルのパスが設定されます。
[gowatana@lab-vm-02 ~]$ ls -l 合計 4 drwxrwxr-x. 2 gowatana gowatana 21 12月 23 01:11 bin -rw-rw-r--. 1 gowatana gowatana 3532 12月 23 01:22 dev-k8s-01.cfg [gowatana@lab-vm-02 ~]$ echo $KUBECONFIG /home/gowatana/dev-k8s-01.cfg
kubectl での Kubernetes クラスタへの接続
kubeconfig ファイルは、環境変数「KUBECONFIG」にファイルのパスを設定することで、kubectl に読み込ませることができます。
今回は、ファイル作成時に同時に設定されていますが、OS にログインしなおした際にも反映させるには、$HOME/.bash_profile ファイルなどに「export KUBECONFIG=パス」を追記しておきます。
[gowatana@lab-vm-02 ~]$ export KUBECONFIG=$HOME/dev-k8s-01.cfg [gowatana@lab-vm-02 ~]$ kubectl get node NAME STATUS ROLES AGE VERSION karbon-dev-k8s-01-d2f387-k8s-master-0 Ready master 9d v1.16.8 karbon-dev-k8s-01-d2f387-k8s-worker-0 Ready node 9d v1.16.8
また、「--kubeconig」オプションでも、kubeconfig ファイルを指定できます。
[gowatana@lab-vm-02 ~]$ kubectl --kubeconfig=./dev-k8s-01.cfg get node NAME STATUS ROLES AGE VERSION karbon-dev-k8s-01-d2f387-k8s-master-0 Ready master 9d v1.16.8 karbon-dev-k8s-01-d2f387-k8s-worker-0 Ready node 9d v1.16.8
kubeconfig は、$HOME/.kube/config ファイルとして保存して、kubectl に読み込ませることもできます。
[gowatana@lab-vm-02 ~]$ unset KUBECONFIG [gowatana@lab-vm-02 ~]$ mkdir $HOME/.kube [gowatana@lab-vm-02 ~]$ cp ./dev-k8s-01.cfg $HOME/.kube/config [gowatana@lab-vm-02 ~]$ kubectl get node NAME STATUS ROLES AGE VERSION karbon-dev-k8s-01-d2f387-k8s-master-0 Ready master 9d v1.16.8 karbon-dev-k8s-01-d2f387-k8s-worker-0 Ready node 9d v1.16.8
kubectl でクラスタに接続して、Pod が起動できました。
[gowatana@lab-vm-02 ~]$ kubectl run pod-01 --image=nginx --restart=Never pod/pod-01 created [gowatana@lab-vm-02 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE pod-01 1/1 Running 0 23s
おまけ
Tips 1: 動作確認の Pod 起動について
以前に投稿した 2048 Pod の起動です。
もうすこし無難なデモむけ。httpd Pod を NodePort で起動します。
Tips 2: kubectl VM 作成自動化くん
今回の投稿内容のかわりに、acli で、kubectl のインストールされた CentOS7 VM を自動作成する方法です。
Custom Script(Cloud-Init の YAML)は、下記のように Prism でも利用できます。
以上。