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も頑張っているので、何卒、よろしくお願いします。