マニフェスト
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 コマンドを使うのが推奨されます。
コメント