Kubernetesマニフェストファイルの雛形作成コマンドたち
マニフェストファイルの雛形を、kubectlにて取得するコマンドをメモしておきます。
目次
- 目次
- 環境
- 基本的な情報
- 公式の参考ページ
- Namespace
- Resource Quota
- Pod
- Deployment
- ReplicaSet
- DaemonSet
- Service: ClusterIP
- Service: NodePort
- Ingress
- ConfigMap
- Secret
- Role
- RoleBinding
- ClusterRole
- ClusterRoleBinding
- ServiceAccount
- Job
- cronjob
- explainの使い方
- テンプレートの検証
環境
- kubernetes
- v1.20.0
基本的な情報
リソース作成用のkubectlコマンドにて、 --dry-run=client
オプションと -o yaml
オプションを付与して実行すれば、リソースを作成せずテンプレートを出力してくれます。
kubectl xxx --help
を実行すれば、必要サブコマンドやオプション、コマンド例を確認できます。
公式の参考ページ
Namespace
$ kubectl create namespace sample --dry-run=client -o yaml
Resource Quota
$ kubectl create quota sample --hard=cpu=2,memory=2Gi,pods=10 --scopes=NotBestEffort --dry-run=client -o yaml
cpu
は requests.cpu
と、 memory
は requests.memory
と同義。
Pod
$ kubectl run sample --image=nginx --restart=Never --labels="key=value" --dry-run=client -o yaml
コンテナのポートを公開する場合。
$ kubectl run sample --image=nginx --restart=Never --port=80 --labels="key=value" --dry-run=client -o yaml
docker run
の ENTRYPOINT
オプションを指定する場合。
$ kubectl run sample --image=busybox:1.28 --restart=Never --dry-run=client -o yaml --command -- sleep 60
env
の設定する場合。
$ kubectl run sample --image=nginx --env=key1=value1 --restart=Never --dry-run=client -o yaml
Resource Requests
と Limits
を設定する場合。
$ kubectl run sample --image=nginx --requests=cpu=0.2,memory=100Mi --limits=cpu=0.5,memory=500Mi --restart=Never --dry-run=client -o yaml
Deployment
$ kubectl create deployment sample --image=nginx --dry-run=client -o yaml
ReplicaSet
$ kubectl create deployment sample --image=nginx --replicas=3 --dry-run=client -o yaml
DaemonSet
$ kubectl create deployment sample --image=nginx --dry-run=client -o yaml | sed '/replicas/d;s/Deployment/DaemonSet/g'
参考:Create Daemonset using kubectl?
Service: ClusterIP
$ kubectl expose pod sample --name=svc-sample --port=80 --target-port=8080 --dry-run=client -o yaml
Service: NodePort
$ kubectl expose pod sample --name=svc-sample --port=80 --target-port=8080 --type=NodePort --dry-run=client -o yaml
利用するnodePortを明示的に指定したい場合、マニフェストファイルを直接編集する。
Ingress
$ kubectl create ingress sample --rule="sample.com/=service:8080" --dry-run=client -o yaml
公式ドキュメントを見たほうが分かりやすい。
ConfigMap
文字列を指定する場合。
$ kubectl create configmap cm-sample --from-literal=key1=value1 --from-literal=key2=value2 --dry-run=client -o yaml
ファイルを指定する場合。
$ kubectl create configmap cm-sample --from-file=/path/to/file --dry-run=client -o yaml
envファイルを指定する場合。
$ kubectl create configmap cm-sample --from-env-file=/path/to/env --dry-run=client -o yaml
Secret
$ kubectl create secret generic secret-sample --from-literal=key1=value2 --dry-run=client -o yaml
Dockerレジストリ情報を登録したい場合、サブコマンド generic
を docker-registry
に、非対称鍵を登録したい場合 tls
に変更する。それぞれ必要オプションは --help
で確認すること。
Role
$ kubectl create role role-name --verb=list,view --resource=pod,deployment -n default --dry-run=client -o yaml
RoleBinding
$ kubectl create rolebinding rolebinding-name --role=role-name --user=user-name -n default --dry-run=client -o yaml
ClusterRole
$ kubectl create clusterrole crole-name --verb=list,view --resource=replicaset --dry-run=client -o yaml
ClusterRoleBinding
$ kubectl create clusterrolebinding crolebinding-name --clusterrole=crole-name --user=user-name --dry-run=client -o yaml
ServiceAccount
$ kubectl create serviceaccount sa-name --dry-run=client -o yaml
Job
$ kubectl create job sample --image=busybox:1.28 --restart=OnFailure --dry-run=client -o yaml -- /bin/sh -c 'echo "Hello. Hololive"'
cronjob
$ kubectl create cronjob sample --image=busybox:1.28 --restart=OnFailure -schedule='*/1 * * * *' --dry-run=Client -o yaml -- /bin/sh -c 'echo "Hello. Hololive"'
explainの使い方
雛形を出力できないパラメーター部分に関して、 explain
コマンドを利用することで、雛形の確認ができます。
説明を確認したい場合。
$ kubectl explain pod.spec.containers.volumeMounts KIND: Pod VERSION: v1 RESOURCE: volumeMounts <[]Object> DESCRIPTION: Pod volumes to mount into the container's filesystem. Cannot be updated. VolumeMount describes a mounting of a Volume within a container. FIELDS: mountPath <string> -required- Path within the container at which the volume should be mounted. Must not contain ':'. mountPropagation <string> mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. name <string> -required- This must match the Name of a Volume. readOnly <boolean> Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. subPath <string> Path within the volume from which the container's volume should be mounted. Defaults to "" (volume's root). subPathExpr <string> Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive.
もっとシンプルに、雛形のみ確認したい場合は --recursive
オプションを利用。
$ kubectl explain pod.spec.containers.volumeMounts --recursive KIND: Pod VERSION: v1 RESOURCE: volumeMounts <[]Object> DESCRIPTION: Pod volumes to mount into the container's filesystem. Cannot be updated. VolumeMount describes a mounting of a Volume within a container. FIELDS: mountPath <string> mountPropagation <string> name <string> readOnly <boolean> subPath <string> subPathExpr <string>
grepを併用することで、ざっくりとした検索も簡単にできるようなります。
$ kubectl explain pod --recursive | grep -iA10 volumemount volumeMounts <[]Object> mountPath <string> mountPropagation <string> name <string> readOnly <boolean> subPath <string> subPathExpr <string> workingDir <string> dnsConfig <Object> nameservers <[]string> options <[]Object>
テンプレートの検証
--validate --dry-run=client
をつけることで、作成したテンプレートのvalidationをできます。
$ kubectl apply -f sample.yaml --validate --dry-run=client error: error validating "sample.yaml": error validating data: ValidationError(Pod.spec.containers[0]): unknown field "imege" in io.k8s.api.core.v1.Container; if you choose to ignore these errors, turn validation off with --validate=false