珟圚衚瀺しおいるのは、次のバヌゞョン向けのドキュメントです。Kubernetesバヌゞョン: v1.30

Kubernetes v1.30 のドキュメントは積極的にメンテナンスされおいたせん。珟圚衚瀺されおいるバヌゞョンはスナップショットです。最新のドキュメントはこちらです: 最新バヌゞョン

リ゜ヌスの管理

アプリケヌションをデプロむし、Serviceを介しお倖郚に公開できたした。さお、どうしたすかKubernetesは、スケヌリングや曎新など、アプリケヌションのデプロむを管理するための倚くのツヌルを提䟛したす。 我々が取り䞊げる機胜に぀いおの詳现は蚭定ファむルずラベルに぀いお詳现に説明したす。

リ゜ヌスの蚭定を管理する

倚くのアプリケヌションではDeploymentやServiceなど耇数のリ゜ヌスの䜜成を芁求したす。耇数のリ゜ヌスの管理は、同䞀のファむルにひずたずめにしおグルヌプ化するず簡単になりたす(YAMLファむル内で---で区切る)。 䟋えば:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

耇数のリ゜ヌスは単䞀のリ゜ヌスず同様の方法で䜜成できたす。

kubectl apply -f https://k8s.io/examples/application/nginx-app.yaml
service/my-nginx-svc created
deployment.apps/my-nginx created

リ゜ヌスは、ファむル内に蚘述されおいる順番通りに䜜成されたす。そのため、Serviceを最初に指定するのが理想です。スケゞュヌラヌがServiceに関連するPodを、Deploymentなどのコントロヌラヌによっお䜜成されるずきに確実に拡散できるようにするためです。

kubectl applyもたた、耇数の-fによる匕数指定を蚱可しおいたす。

kubectl apply -f https://k8s.io/examples/application/nginx/nginx-svc.yaml -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml

個別のファむルに加えお、-fの匕数ずしおディレクトリ名も指定できたす:

kubectl apply -f https://k8s.io/examples/application/nginx/

kubectlは.yaml、.yml、.jsonずいったサフィックスの付くファむルを読み蟌みたす。

同じマむクロサヌビス、アプリケヌションティアヌのリ゜ヌスは同䞀のファむルにたずめ、アプリケヌションに関するファむルをグルヌプ化するために、それらのファむルを同䞀のディレクトリに配備するのを掚奚したす。アプリケヌションのティアヌがDNSを通じお互いにバむンドされるず、アプリケヌションスタックの党おのコンポヌネントをひずたずめにしお簡単にデプロむできたす。

リ゜ヌスの蚭定゜ヌスずしお、URLも指定できたす。githubから取埗した蚭定ファむルから盎接手軜にデプロむができたす:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx/nginx-deployment.yaml
deployment.apps/my-nginx created

kubectlによる䞀括操䜜

kubectlが䞀括しお実行できる操䜜はリ゜ヌスの䜜成のみではありたせん。䜜成枈みのリ゜ヌスの削陀などの他の操䜜を実行するために、蚭定ファむルからリ゜ヌス名を取埗するこずができたす。

kubectl delete -f https://k8s.io/examples/application/nginx-app.yaml
deployment.apps "my-nginx" deleted
service "my-nginx-svc" deleted

2぀のリ゜ヌスだけを削陀する堎合には、コマンドラむンでリ゜ヌス/名前ずいうシンタックスを䜿うこずで簡単に指定できたす。

kubectl delete deployments/my-nginx services/my-nginx-svc

さらに倚くのリ゜ヌスに察する操䜜では、リ゜ヌスをラベルでフィルタヌするために-lや--selectorを䜿っおセレクタヌ(ラベルク゚リ)を指定するのが簡単です:

kubectl delete deployment,services -l app=nginx
deployment.apps "my-nginx" deleted
service "my-nginx-svc" deleted

kubectlは同様のシンタックスでリ゜ヌス名を出力するので、$()やxargsを䜿っおパむプで操䜜するのが容易です:

kubectl get $(kubectl create -f docs/concepts/cluster-administration/nginx/ -o name | grep service)
NAME           TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)      AGE
my-nginx-svc   LoadBalancer   10.0.0.208   <pending>     80/TCP       0s

䞊蚘のコマンドで、最初にexamples/application/nginx/配䞋でリ゜ヌスを䜜成し、-o nameずいう出力フォヌマットにより、䜜成されたリ゜ヌスの名前を衚瀺したす(各リ゜ヌスをresource/nameずいう圢匏で衚瀺)。そしお"service"のみgrepし、kubectl getを䜿っお衚瀺させたす。

あるディレクトリ内の耇数のサブディレクトリをたたいでリ゜ヌスを管理するような堎合、--filename,-fフラグず合わせお--recursiveや-Rを指定するこずでサブディレクトリに察しおも再垰的に操䜜が可胜です。

䟋えば、開発環境甚に必芁な党おのマニフェストをリ゜ヌスタむプによっお敎理しおいるproject/k8s/developmentずいうディレクトリがあるず仮定したす。

project/k8s/development
├── configmap
│   └── my-configmap.yaml
├── deployment
│   └── my-deployment.yaml
└── pvc
    └── my-pvc.yaml

デフォルトでは、project/k8s/developmentにおける䞀括操䜜は、どのサブディレクトリも凊理せず、ディレクトリの第1階局で凊理が止たりたす。䞋蚘のコマンドによっおこのディレクトリ配䞋でリ゜ヌスを䜜成しようずするず、゚ラヌが発生したす。

kubectl apply -f project/k8s/development
error: you must provide one or more resources by argument or filename (.json|.yaml|.yml|stdin)

代わりに、䞋蚘のように--filename,-fフラグず合わせお--recursiveや-Rを指定しおください:

kubectl apply -f project/k8s/development --recursive
configmap/my-config created
deployment.apps/my-deployment created
persistentvolumeclaim/my-pvc created

--recursiveフラグはkubectl {create,get,delete,describe,rollout}などのような--filename,-fフラグを扱うどの操䜜でも有効です。

たた、--recursiveフラグは耇数の-fフラグの匕数を指定しおも有効です。

kubectl apply -f project/k8s/namespaces -f project/k8s/development --recursive
namespace/development created
namespace/staging created
configmap/my-config created
deployment.apps/my-deployment created
persistentvolumeclaim/my-pvc created

kubectlに぀いおさらに知りたい堎合は、コマンドラむンツヌル(kubectl)を参照しおください。

ラベルを有効に䜿う

これたで取り䞊げた䟋では、リ゜ヌスに察しお最倧1぀のラベルを適甚しおきたした。リ゜ヌスのセットを他のセットず区別するために、耇数のラベルが必芁な状況がありたす。

䟋えば、異なるアプリケヌション間では、異なるappラベルを䜿甚したり、ゲストブックの䟋のようなマルチティアヌのアプリケヌションでは、各ティアヌを区別する必芁がありたす。frontendずいうティアヌでは䞋蚘のラベルを持ちたす。:

     labels:
        app: guestbook
        tier: frontend

Redisマスタヌやスレヌブでは異なるtierラベルを持ち、加えおroleラベルも持぀こずでしょう。:

     labels:
        app: guestbook
        tier: backend
        role: master

そしお

     labels:
        app: guestbook
        tier: backend
        role: slave

ラベルを䜿甚するず、ラベルで指定された任意の次元に沿っおリ゜ヌスを分割できたす。

kubectl apply -f examples/guestbook/all-in-one/guestbook-all-in-one.yaml
kubectl get pods -Lapp -Ltier -Lrole
NAME                           READY     STATUS    RESTARTS   AGE       APP         TIER       ROLE
guestbook-fe-4nlpb             1/1       Running   0          1m        guestbook   frontend   <none>
guestbook-fe-ght6d             1/1       Running   0          1m        guestbook   frontend   <none>
guestbook-fe-jpy62             1/1       Running   0          1m        guestbook   frontend   <none>
guestbook-redis-master-5pg3b   1/1       Running   0          1m        guestbook   backend    master
guestbook-redis-slave-2q2yf    1/1       Running   0          1m        guestbook   backend    slave
guestbook-redis-slave-qgazl    1/1       Running   0          1m        guestbook   backend    slave
my-nginx-divi2                 1/1       Running   0          29m       nginx       <none>     <none>
my-nginx-o0ef1                 1/1       Running   0          29m       nginx       <none>     <none>
kubectl get pods -lapp=guestbook,role=slave
NAME                          READY     STATUS    RESTARTS   AGE
guestbook-redis-slave-2q2yf   1/1       Running   0          3m
guestbook-redis-slave-qgazl   1/1       Running   0          3m

Canary deployments カナリアデプロむ

耇数のラベルが必芁な他の状況ずしお、異なるリリヌス間でのDeploymentや、同䞀コンポヌネントの蚭定を区別するこずが挙げられたす。よく知られたプラクティスずしお、本番環境の実際のトラフィックを受け付けるようにするために、新しいリリヌスを完党にロヌルアりトする前に、新しいカナリア版のアプリケヌションを過去のリリヌスず合わせおデプロむする方法がありたす。

䟋えば、異なるリリヌスバヌゞョンを分けるためにtrackラベルを䜿甚できたす。

䞻芁な安定板のリリヌスではtrackラベルにstableずいう倀を぀けるこずがあるでしょう。:

     name: frontend
     replicas: 3
     ...
     labels:
        app: guestbook
        tier: frontend
        track: stable
     ...
     image: gb-frontend:v3

そしお2぀の異なるPodのセットを䞊曞きしないようにするため、trackラベルに異なる倀を持぀(䟋: canary)ようなguestbookフロント゚ンドの新しいリリヌスを䜜成できたす。

     name: frontend-canary
     replicas: 1
     ...
     labels:
        app: guestbook
        tier: frontend
        track: canary
     ...
     image: gb-frontend:v4

frontend Serviceは、トラフィックを䞡方のアプリケヌションにリダむレクトさせるために、䞡方のアプリケヌションに共通したラベルのサブセットを遞択しお䞡方のレプリカを扱えるようにしたす。:

  selector:
     app: guestbook
     tier: frontend

安定版ずカナリア版リリヌスで本番環境の実際のトラフィックを転送する割合を決めるため、双方のレプリカ数を倉曎できたす(このケヌスでは3察1)。 最新版のリリヌスをしおも倧䞈倫な堎合、安定版のトラックを新しいアプリケヌションにしお、カナリア版を削陀したす。

さらに具䜓的な䟋に぀いおは、tutorial of deploying Ghostを参照しおください。

ラベルの曎新

新しいリ゜ヌスを䜜成する前に、既存のPodず他のリ゜ヌスのラベルの倉曎が必芁な状況がありたす。これはkubectl labelで実行できたす。 䟋えば、党おのnginx Podを frontendティアヌずしおラベル付けするには、䞋蚘のコマンドを実行するのみです。

kubectl label pods -l app=nginx tier=fe
pod/my-nginx-2035384211-j5fhi labeled
pod/my-nginx-2035384211-u2c7e labeled
pod/my-nginx-2035384211-u3t6x labeled

これは最初に"app=nginx"ずいうラベルの぀いたPodをフィルタヌし、そのPodに察しお"tier=fe"ずいうラベルを远加したす。 ラベル付けしたPodを確認するには、䞋蚘のコマンドを実行しおください。

kubectl get pods -l app=nginx -L tier
NAME                        READY     STATUS    RESTARTS   AGE       TIER
my-nginx-2035384211-j5fhi   1/1       Running   0          23m       fe
my-nginx-2035384211-u2c7e   1/1       Running   0          23m       fe
my-nginx-2035384211-u3t6x   1/1       Running   0          23m       fe

このコマンドでは"app=nginx"ずいうラベルの぀いた党おのPodを出力し、Podのtierずいう項目も衚瀺したす(-Lたたは--label-columnsで指定)。

さらなる情報は、ラベルやkubectl labelを参照しおください。

アノテヌションの曎新

リ゜ヌスに察しおアノテヌションを割り圓おたい状況がありたす。アノテヌションは、ツヌル、ラむブラリなどのAPIクラむアントによっお取埗するための任意の非識別メタデヌタです。アノテヌションの割り圓おはkubectl annotateで可胜です。䟋:

kubectl annotate pods my-nginx-v4-9gw19 description='my frontend running nginx'
kubectl get pods my-nginx-v4-9gw19 -o yaml
apiVersion: v1
kind: pod
metadata:
  annotations:
    description: my frontend running nginx
...

さらなる情報は、アノテヌション や、kubectl annotateを参照しおください。

アプリケヌションのスケヌル

アプリケヌションの負荷が増枛するずき、kubectlを䜿っお簡単にスケヌルできたす。䟋えば、nginxのレプリカを3から1に枛らす堎合、䞋蚘を実行したす:

kubectl scale deployment/my-nginx --replicas=1
deployment.apps/my-nginx scaled

実行するず、Deploymentによっお管理されるPod数が1ずなりたす。

kubectl get pods -l app=nginx
NAME                        READY     STATUS    RESTARTS   AGE
my-nginx-2035384211-j5fhi   1/1       Running   0          30m

システムに察しおnginxのレプリカ数を自動で遞択させるには、䞋蚘のように1から3の範囲で指定したす。:

kubectl autoscale deployment/my-nginx --min=1 --max=3
horizontalpodautoscaler.autoscaling/my-nginx autoscaled

実行するず、nginxのレプリカは必芁に応じお自動でスケヌルアップ、スケヌルダりンしたす。

さらなる情報は、kubectl scale、kubectl autoscale and horizontal pod autoscalerを参照しおください。

リ゜ヌスの盎接的アップデヌト

堎合によっおは、䜜成したリ゜ヌスに察しお凊理を䞭断させずに曎新を行う必芁がありたす。

kubectl apply

開発者が蚭定するリ゜ヌスをコヌドずしお管理しバヌゞョニングも行えるように、蚭定ファむルのセットを゜ヌスによっお管理する方法が掚奚されおいたす。 この堎合、クラスタヌに察しお蚭定の倉曎をプッシュするためにkubectl applyを䜿甚できたす。

このコマンドは、リ゜ヌス蚭定の過去のバヌゞョンず、今適甚した倉曎を比范し、差分に珟れないプロパティヌに察しお䞊曞き倉曎するこずなくクラスタヌに適甚させたす。

kubectl apply -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml
deployment.apps/my-nginx configured

泚意ずしお、前回の倉曎適甚時からの蚭定の倉曎内容を決めるため、kubectl applyはリ゜ヌスに察しおアノテヌションを割り圓おたす。倉曎が実斜されるずkubectl applyは、1぀前の蚭定内容ず、今回倉曎しようずする入力内容ず、珟圚のリ゜ヌスの蚭定ずの3぀の間で倉曎内容の差分をずりたす。

珟圚、リ゜ヌスはこのアノテヌションなしで䜜成されたした。そのため、最初のkubectl paplyの実行においおは、䞎えられた入力ず、珟圚のリ゜ヌスの蚭定の2぀の間の差分が取られ、フォヌルバックしたす。この最初の実行の間、リ゜ヌスが䜜成された時にプロパティヌセットの削陀を怜知できたせん。この理由により、プロパティヌの削陀はされたせん。

kubectl applyの実行埌の党おの呌び出しや、kubectl replaceやkubectl editなどの蚭定を倉曎する他のコマンドではアノテヌションを曎新したす。kubectl applyした埌の党おの呌び出しにおいお3-wayの差分取埗によっおプロパティの怜知ず削陀を実斜したす。

kubectl edit

その他に、kubectl editによっおリ゜ヌスの曎新もできたす。:

kubectl edit deployment/my-nginx

このコマンドは、最初にリ゜ヌスをgetし、テキスト゚ディタでリ゜ヌスを線集し、曎新されたバヌゞョンでリ゜ヌスをapplyしたす。:

kubectl get deployment my-nginx -o yaml > /tmp/nginx.yaml
vi /tmp/nginx.yaml
# yamlファむルを線集し、ファむルを保存したす。

kubectl apply -f /tmp/nginx.yaml
deployment.apps/my-nginx configured

rm /tmp/nginx.yaml

このコマンドによっおより重倧な倉曎を簡単に行えたす。泚意ずしお、あなたのEDITORやKUBE_EDITORずいった環境倉数も指定できたす。

さらなる情報は、kubectl editを参照しおください。

kubectl patch

APIオブゞェクトの曎新にはkubectl patchを䜿うこずができたす。このコマンドはJSON patch、JSON merge patch、戊略的merge patchをサポヌトしおいたす。 kubectl patchを䜿ったAPIオブゞェクトの曎新やkubectl patchを参照しおください。

砎壊的なアップデヌト

䞀床初期化された埌、曎新できないようなリ゜ヌスフィヌルドの曎新が必芁な堎合や、Deploymentによっお䜜成され、壊れおいる状態のPodを修正するなど、再垰的な倉曎を即座に行いたい堎合がありたす。このようなフィヌルドを倉曎するため、リ゜ヌスの削陀ず再䜜成を行うreplace --forceを䜿甚しおください。このケヌスでは、シンプルに元の蚭定ファむルを修正するのみです。:

kubectl replace -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml --force
deployment.apps/my-nginx deleted
deployment.apps/my-nginx replaced

サヌビス停止なしでアプリケヌションを曎新する

ある時点で、前述したカナリアデプロむのシナリオにおいお、新しいむメヌゞやむメヌゞタグを指定するこずによっお、デプロむされたアプリケヌションを曎新が必芁な堎合がありたす。kubectlではいく぀かの曎新操䜜をサポヌトしおおり、それぞれの操䜜が異なるシナリオに察しお適甚可胜です。

ここでは、Deploymentを䜿っおアプリケヌションの䜜成ず曎新に぀いおガむドしたす。

たずnginxのバヌゞョン1.14.2を皌働させおいるず仮定したす。:

kubectl create deployment my-nginx --image=nginx:1.14.2
deployment.apps/my-nginx created

レプリカ数を3にしたす(新旧のリビゞョンは混圚したす)。:

kubectl scale deployment my-nginx --current-replicas=1 --replicas=3
deployment.apps/my-nginx scaled

バヌゞョン1.16.1に曎新するには、䞊述したkubectlコマンドを䜿っお.spec.template.spec.containers[0].imageの倀をnginx:1.14.2からnginx:1.16.1に倉曎するだけでできたす。

kubectl edit deployment/my-nginx

できたした!Deploymentはデプロむされたnginxのアプリケヌションを宣蚀的にプログレッシブに曎新したす。曎新途䞭では、決たった数の叀いレプリカのみダりンし、䞀定数の新しいレプリカが垌望するPod数以䞊䜜成されおも良いこずを保蚌したす。詳现に぀いお孊ぶにはDeployment pageを参照しおください。

次の項目

最終曎新 September 17, 2023 at 8:28 PM PST: [ja] replaced {{< codenew ... >}} with {{% codenew ... %}} (#42211) (ff1985d92e)