oc run
を使ったPodのデプロイについて。
OpenShift v4では、oc run
を使ってDeploymentConfigやDeploymentを作成するとDEPRECATEDの警告が表示さるようになった。(正確にはv4.1は触ったことないからわからない)
k8sバージョン1.18で無くなる模様。
予定ではpod単体のデプロイに特化するようになるらしいが、現状どう動作するかについてまとめた。
以下、OKD v4.4(k8s v1.17.1)で確認。
[zaki@okd4-manager ~]$ oc version Client Version: 4.4.0-0.okd-2020-01-28-022517 Kubernetes Version: v1.17.1
Pod単発
現在は--restart=Never
を付けるとpod単体でデプロイされる。(将来これがデフォルトの動作になるっぽい)
[zaki@okd4-manager ~]$ oc run never-restart-pod --restart=Never --image=rhel:7.7 -- tail -f /dev/null pod/never-restart-pod created [zaki@okd4-manager ~]$ oc get all NAME READY STATUS RESTARTS AGE pod/never-restart-pod 0/1 ContainerCreating 0 2s
DeploymentConfigで起動
OpenShiftではこれがデフォルト動作。
[zaki@okd4-manager ~]$ oc run dc-run-pod --image=rhel:7.7 -- tail -f /dev/null kubectl run --generator=deploymentconfig/v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. [zaki@okd4-manager ~]$ oc get all -l run=dc-run-pod NAME READY STATUS RESTARTS AGE pod/dc-run-pod-1-ht77f 1/1 Running 0 49s NAME DESIRED CURRENT READY AGE replicationcontroller/dc-run-pod-1 1 1 1 57s NAME REVISION DESIRED CURRENT TRIGGERED BY deploymentconfig.apps.openshift.io/dc-run-pod 1 1 1 config
DeploymentConfig, ReplicationController, Podが作成される。
Deploymentで起動
--generator=deployment/apps.v1
を付けるとDeploymentConfigでなくDeploymentが作成される。
kubectl
の場合はこちらがデフォルト動作。
[zaki@okd4-manager ~]$ oc run deploy-run-pod --generator=deployment/apps.v1 --image=rhel:7.7 -- tail -f /dev/null kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. [zaki@okd4-manager ~]$ oc get all -l run=deploy-run-pod NAME READY STATUS RESTARTS AGE pod/deploy-run-pod-56c6698fdb-dzk2g 1/1 Running 0 42s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/deploy-run-pod 1/1 1 1 42s NAME DESIRED CURRENT READY AGE replicaset.apps/deploy-run-pod-56c6698fdb 1 1 1 42s
Deployment, ReplicaSet, Podが作成される。
k8s(1.17)の場合
$ kubectl version Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2019-12-07T21:20:10Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2019-12-07T21:12:17Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}
$ kubectl run k8s-run-pod --image=centos:7 -- tail -f /dev/null kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. deployment.apps/k8s-run-pod created $ kubectl get all -l run=k8s-run-pod NAME READY STATUS RESTARTS AGE pod/k8s-run-pod-655b579894-dzlc2 1/1 Running 0 20s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/k8s-run-pod 1/1 1 1 20s NAME DESIRED CURRENT READY AGE replicaset.apps/k8s-run-pod-655b579894 1 1 1 20s
デプロイと同時にServiceリソースも作成する
--expose
と、--port
で使用するポート番号を指定する。
(--port
のみだとserviceは作成されない。--expose
は--port
の指定が無ければエラーになる)
[zaki@okd4-manager ~]$ oc run dc-run-with-svc --image=rhel:7.7 --port=8080 --expose -- tail -f /dev/null kubectl run --generator=deploymentconfig/v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. service/dc-run-with-svc created deploymentconfig.apps.openshift.io/dc-run-with-svc created [zaki@okd4-manager ~]$ oc get all -l run=dc-run-with-svc NAME READY STATUS RESTARTS AGE pod/dc-run-with-svc-1-wddbs 0/1 ContainerCreating 0 1s NAME DESIRED CURRENT READY AGE replicationcontroller/dc-run-with-svc-1 1 1 0 9s NAME REVISION DESIRED CURRENT TRIGGERED BY deploymentconfig.apps.openshift.io/dc-run-with-svc 1 1 1 config [zaki@okd4-manager ~]$ oc get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dc-run-with-svc ClusterIP 172.30.211.158 <none> 8080/TCP 16s
dc,rc,pod,svcが作成される。
Depoyment + Service
これまでの組み合わせ。
[zaki@okd4-manager ~]$ oc run deploy-run-with-svc --image=rhel:7.7 --generator=deployment/apps.v1 --port=8080 --expose -- tail -f /dev/null kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. service/deploy-run-with-svc created deployment.apps/deploy-run-with-svc created [zaki@okd4-manager ~]$ oc get all -l run=deploy-run-with-svc NAME READY STATUS RESTARTS AGE pod/deploy-run-with-svc-5ffbb8d9c7-h2j28 1/1 Running 0 20s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/deploy-run-with-svc 1/1 1 1 20s NAME DESIRED CURRENT READY AGE replicaset.apps/deploy-run-with-svc-5ffbb8d9c7 1 1 1 20s [zaki@okd4-manager ~]$ oc get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dc-run-with-svc ClusterIP 172.30.211.158 <none> 8080/TCP 2m54s deploy-run-with-svc ClusterIP 172.30.202.241 <none> 8080/TCP 22s
oc run
は--dry-run
が使えるので、実行前に--dry-run -o yaml
すれば何が起きるかわかりやすいし、何ならYAMLファイルに出力してマニフェスト作成して、oc apply -f
するのが何かと楽と思う。きっと。
とはいえ--generatorは近い将来(というか次のk8sリリース)に廃止されるオプションなので、大人しくoc create
に移行するのが吉。
ちなみにpod単体でデプロイしてもオートヒーリングとか聞かないしデプロイされてるノードをdrainしても退避できないのでいろいろ注意(というか検証用に使おう)