マニフェスト
Kubernetes では、マニフェストと呼ばれる構成ファイルに定義したリソースの情報を利用して管理できます。マニフェストは、リソースごとに定められた設定情報を記述する YAML もしくは Json 形式のファイルです。
次のマニフェストは nginx-pod という名前の Pod を定義した簡単なマニフェストの例です。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-contaier
image: nginx
マニフェスト内には複数のリソースを定義することもできます。複数のリソースを記述する際は、リソースの間を「—」で区切ります。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-contaier
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
selector:
app: nginx
利用可能なリソース種類の取得
kubectl コマンドで利用可能なリソースの種類は次のコマンドで取得できます。
kubectl api-resource
実行すると次のような結果を取得できます。
$ kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 true Binding componentstatuses cs v1 false ComponentStatus configmaps cm v1 true ConfigMap endpoints ep v1 true Endpoints events ev v1 true Event limitranges limits v1 true LimitRange namespaces ns v1 false Namespace nodes no v1 false Node persistentvolumeclaims pvc v1 true PersistentVolumeClaim persistentvolumes pv v1 false PersistentVolume pods po v1 true Pod podtemplates v1 true PodTemplate replicationcontrollers rc v1 true ReplicationController resourcequotas quota v1 true ResourceQuota secrets v1 true Secret serviceaccounts sa v1 true ServiceAccount services svc v1 true Service mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition apiservices apiregistration.k8s.io/v1 false APIService controllerrevisions apps/v1 true ControllerRevision daemonsets ds apps/v1 true DaemonSet deployments deploy apps/v1 true Deployment replicasets rs apps/v1 true ReplicaSet statefulsets sts apps/v1 true StatefulSet tokenreviews authentication.k8s.io/v1 false TokenReview localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview horizontalpodautoscalers hpa autoscaling/v1 true HorizontalPodAutoscaler cronjobs cj batch/v1 true CronJob jobs batch/v1 true Job certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest leases coordination.k8s.io/v1 true Lease endpointslices discovery.k8s.io/v1 true EndpointSlice events ev events.k8s.io/v1 true Event flowschemas flowcontrol.apiserver.k8s.io/v1beta1 false FlowSchema prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta1 false PriorityLevelConfiguration ingressclasses networking.k8s.io/v1 false IngressClass ingresses ing networking.k8s.io/v1 true Ingress networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy runtimeclasses node.k8s.io/v1 false RuntimeClass poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget podsecuritypolicies psp policy/v1beta1 false PodSecurityPolicy clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding clusterroles rbac.authorization.k8s.io/v1 false ClusterRole rolebindings rbac.authorization.k8s.io/v1 true RoleBinding roles rbac.authorization.k8s.io/v1 true Role priorityclasses pc scheduling.k8s.io/v1 false PriorityClass csidrivers storage.k8s.io/v1 false CSIDriver csinodes storage.k8s.io/v1 false CSINode csistoragecapacities storage.k8s.io/v1beta1 true CSIStorageCapacity storageclasses sc storage.k8s.io/v1 false StorageClass volumeattachments storage.k8s.io/v1 false VolumeAttachment
基本コマンド
kubectl では次のようなコマンドで各リソースを操作できます。
- create
- delete
- get
- describe
- apply
create
リソースを作成します。create コマンドでは次の種類のリソースを指定して作成することもできます。
- clusterrole
- clusterrolebinding
- configmap
- cronjob
- deployment
- ingress
- job
- namespace
- poddisruptionbudget
- priorityclass
- quota
- rolerolebinding
- secret
- service
- serviceaccount
例えば、Deployment を作成する場合には次のように実行します。
kubectl create deployment nginx --image=nginx
実行すると、リソースが作成されたメッセージが返ってきます。
$ kubectl create deployment nginx --image=nginx deployment.apps/nginx created
このほか、-f オプションを付与してマニフェストからリソースを作成することも可能です。
kubectl create -f [マニフェスト ファイル パス]
$ kubectl create -f sample.yaml pod/nginx-pod created
delete
リソースを削除します。リソースの種類とリソース名を指定することで、リソースを削除します。
kubectl delete deployment nginx
$ kubectl delete deployment nginx deployment.apps "nginx" deleted
また、-f オプションを付与してマニフェストに合致するリソースを削除することも可能です。
kubectl delete -f [マニフェスト ファイル パス]
$ kubectl delete -f sample.yaml pod "nginx-pod" deleted
get
リソースの概要情報を取得します。Pod の情報を取得する際には次のように指定します。
kubectl get pod
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-67bcd7f67d-9ks5r 1/1 Running 0 11m nginx-deployment-67bcd7f67d-f2h6x 1/1 Running 0 11m nginx-deployment-67bcd7f67d-wnml8 1/1 Running 0 11m $ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 12m
describe
リソースの詳細情報を取得します。describe を実行する際はコマンドの結果が長くなるので、リソースを指定する方が良いです。
kubectl describe pod [Pod 名]
$ kubectl describe pod nginx-deployment-67bcd7f67d-9ks5r Name: nginx-deployment-67bcd7f67d-9ks5r Namespace: default Priority: 0 Node: k8s-worker-02/192.168.11.42 Start Time: Sat, 06 Nov 2021 15:43:21 +0900 Labels: app=nginx pod-template-hash=67bcd7f67d Annotations: <none> Status: Running IP: 10.244.1.12 IPs: IP: 10.244.1.12 Controlled By: ReplicaSet/nginx-deployment-67bcd7f67d Containers: nginx-contaier: Container ID: docker://da419eb567b88791f9477d7cf1df47edfccaf399f269bb075e90ee566d2169ce Image: nginx Image ID: docker-pullable://nginx@sha256:644a70516a26004c97d0d85c7fe1d0c3a67ea8ab7ddf4aff193d9f301670cf36 Port: <none> Host Port: <none> State: Running Started: Sat, 06 Nov 2021 15:43:25 +0900 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-k48kv (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-k48kv: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 19m default-scheduler Successfully assigned default/nginx-deployment-67bcd7f67d-9ks5r to k8s-worker-02 Normal Pulling 19m kubelet Pulling image "nginx" Normal Pulled 19m kubelet Successfully pulled image "nginx" in 2.367473402s Normal Created 19m kubelet Created container nginx-contaier Normal Started 19m kubelet Started container nginx-contaier
apply
マニフェストを指定し、既存のリソース状態と変更差分がある場合にその部分を変更します。リソースが存在しない場合にはリソースを新規作成します。
kubectl apply -f [マニフェスト ファイル パス]
# リソースがないでは新規作成 $ kubectl apply -f sample2.yaml deployment.apps/nginx-deployment created service/nginx-service created # リソースに変更がない状態 $ kubectl apply -f sample2.yaml deployment.apps/nginx-deployment unchanged service/nginx-service unchanged # Deployment に変更を加えた状態 $ kubectl apply -f sample2.yaml deployment.apps/nginx-deployment configured service/nginx-service unchanged
作成と変更の両方に対応できるため、リソースの新規作成および変更は apply コマンドを使うのが推奨されます。
コメント