GKE と IKS のコマンド対比 (for novice)


IKS (IBM Cloud Kubernetes Service) と GKE (Google Kubernetes Engine) で kubectl を実行するまでに必要なコマンドの対比メモです。 「GKE使ってる人がIKSも使ってくれたら良いな」という立場上の願いもあり、kubectlレベルの扱いは同じなので、取っ掛かりになればと思います。


## クラスタのリスト表示

GKEの場合

~~~
gcloud container clusters list
~~~


IKSの場合

~~~
bx cs clusters
~~~



## ノードのリスト表示

GKEの場合

~~~
gcloud compute instances list
~~~


IKSの場合

~~~
bx cs workers <クラスタ名>
~~~



## kubectlの資格情報の取得

GKEの場合

~~~
gcloud container clusters get-credentials <クラスタ名>
~~~

IKSの場合

~~~
bx cs cluseter-config <クラスタ名> --admin
~~~

環境変数を表示するので、コピペして、環境変数を有効にする必要があります。 また、YAMLファイルを $HOME/.kube/config にマージすれば、後述の切り替え方法で、切り替えて利用できます。



## GKEとIKSの切り換え

GKE,IKS,オンプレ 環境設定のリスト

~~~
kubectl config get-contexts
~~~

K8sクラスタの選択は、コンテキス名(クラスタ、ユーザーのセット)などを登録したものを指定する。

~~~
kubectl config use-context <コンテキスト名>
~~~


切り替え例
GKEのコンテキスト名は長いので、$HOME/.kube/configを編集して、表示を短くしました。

~~~
imac:~ maho$ kubectl config get-contexts
CURRENT   NAME                          CLUSTER         AUTHINFO                                              NAMESPACE
          gke-cluster-1                 gke_cluster-1   gke_intense-base-183010_asia-northeast1-b_cluster-1   
          iks-mycluster5                mycluster5      admin                                                 default
          kubernetes-admin@kubernetes   kubernetes      kubernetes-admin                                      
          minikube                      minikube        minikube                                              
          sandbox                       kubernetes      kubernetes-admin                                      sandbox
          sysop@sandbox                 kubernetes      sysop                                                 sandbox

# GKEを選択
imac:~ maho$ kubectl config use-context gke-cluster-1
Switched to context "gke-cluster-1".
imac:~ maho$ kubectl get node
NAME                                       STATUS    ROLES     AGE       VERSION
gke-cluster-1-default-pool-1a73d9b1-nf1l   Ready     <none>    9h        v1.10.2-gke.3
gke-cluster-1-default-pool-1e64b7b4-zd57   Ready     <none>    9h        v1.10.2-gke.3
gke-cluster-1-default-pool-f0021c00-8wl3   Ready     <none>    9h        v1.10.2-gke.3

# IKSを選択
imac:~ maho$ kubectl config use-context iks-mycluster5
Switched to context "iks-mycluster5".
imac:~ maho$ kubectl get node
NAME            STATUS    ROLES     AGE       VERSION
10.132.253.17   Ready     <none>    115d      v1.9.2-4+819981a2462d38
10.132.253.30   Ready     <none>    115d      v1.9.2-4+819981a2462d38
10.132.253.38   Ready     <none>    115d      v1.9.2-4+819981a2462d38
10.132.253.39   Ready     <none>    4d        v1.9.7-2+231cc32d0a1119
10.132.253.40   Ready     <none>    4d        v1.9.7-2+231cc32d0a1119
~~~

IKSでもk8s 1.10も利用できます。


## FWの設定

GKEの場合

~~~
gcloud compute firewall-rules create myservice --allow tcp:31080
~~~


IKSの場合

IBM Cloud (旧SoftLayer)にノード・インスタンスが、作られるので、設定不要です。



## kubectl

kubectlの操作方法やコマンドは、GKEとIKSで共通です。 デプロイメントのレプリケーション数を変更して、スケールさせる例です。


### GKEのkubectl操作例

~~~
imac:~ maho$ kubectl config get-contexts
CURRENT   NAME                          CLUSTER         AUTHINFO                                              NAMESPACE
          gke-cluster-1                 gke_cluster-1   gke_intense-base-183010_asia-northeast1-b_cluster-1   
*         iks-mycluster5                mycluster5      admin                                                 default
          kubernetes-admin@kubernetes   kubernetes      kubernetes-admin                                      
          minikube                      minikube        minikube                                              
          sandbox                       kubernetes      kubernetes-admin                                      sandbox
          sysop@sandbox                 kubernetes      sysop                                                 sandbox
imac:~ maho$ kubectl config use-context gke-cluster-1
Switched to context "gke-cluster-1".
imac:~ maho$ kubectl get svc,pod
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
svc/kubernetes   ClusterIP   10.19.240.1     <none>        443/TCP        10h
svc/webserver1   NodePort    10.19.255.112   <none>        80:31080/TCP   9h

NAME                             READY     STATUS    RESTARTS   AGE
po/webserver1-5d89b656f7-4nm7h   1/1       Running   0          9h
imac:~ maho$ 
imac:~ maho$ kubectl edit deploy webserver1
deployment "webserver1" edited
imac:~ maho$ kubectl get svc,pod
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
svc/kubernetes   ClusterIP   10.19.240.1     <none>        443/TCP        10h
svc/webserver1   NodePort    10.19.255.112   <none>        80:31080/TCP   9h

NAME                             READY     STATUS              RESTARTS   AGE
po/webserver1-5d89b656f7-4bj75   0/1       ContainerCreating   0          3s
po/webserver1-5d89b656f7-4nm7h   1/1       Running             0          9h
po/webserver1-5d89b656f7-ddb5c   0/1       ContainerCreating   0          3s
po/webserver1-5d89b656f7-kkcxf   0/1       ContainerCreating   0          3s
po/webserver1-5d89b656f7-svwrn   0/1       ContainerCreating   0          3s
~~~

### IKSのkubectl操作例

~~~
imac:~ maho$ kubectl config use-context iks-mycluster5
Switched to context "iks-mycluster5".
imac:~ maho$ kubectl get svc,pod
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
svc/kubernetes   ClusterIP   172.21.0.1       <none>        443/TCP        115d
svc/webserver1   NodePort    172.21.210.145   <none>        80:31080/TCP   1h

NAME                             READY     STATUS    RESTARTS   AGE
po/webserver1-5d56bb6589-42p5p   1/1       Running   0          1h
po/webserver1-5d56bb6589-rz4mq   1/1       Running   0          1h
po/webserver1-5d56bb6589-zf8ch   1/1       Running   0          1h
(reverse-i-search)`vi': vi config
imac:~ maho$ kubectl edit deploy
deployment "webserver1" edited
imac:~ maho$ kubectl get svc,pod
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
svc/kubernetes   ClusterIP   172.21.0.1       <none>        443/TCP        115d
svc/webserver1   NodePort    172.21.210.145   <none>        80:31080/TCP   1h

NAME                             READY     STATUS              RESTARTS   AGE
po/webserver1-5d56bb6589-42p5p   1/1       Running             0          1h
po/webserver1-5d56bb6589-g5s6c   0/1       ContainerCreating   0          3s
po/webserver1-5d56bb6589-pfsq5   0/1       ContainerCreating   0          3s
po/webserver1-5d56bb6589-rz4mq   1/1       Running             0          1h
po/webserver1-5d56bb6589-zf8ch   1/1       Running             0          1h
~~~


## まとめ

GKEは元祖なので、優れた機能が有り、スタンダード的な存在と思います。 一方で、IBMは後発で追う立場でもあますが、IKSも頑張っているので、何卒、よろしくお願いします。