RHEL8からdockerコマンドの代わりにpodmanコマンドの利用が推奨されるようになったので、podmanコマンドの使い方を以下のページに作成しました。
コンテナ起動時、コンテナ間通信の処理概要(Podman編)
コンテナイメージのレジストリ検索方法(Podman編)
podmanコマンドの使い方(Almalinux9)
podmanコマンドの使い方
コンテナーのネットワークについて
コンテナイメージのレジストリ検索方法(Podman編)
Podmanでコンテナ/ホスト間でファイルをコピーする方法
#1 コマンド一覧(kubernetes 1.2)
以下は、man kubectlから抜粋したもの。
チェック印がついているものは、本ページで説明をしているものです。
- kubectl get
- kubectl describe
- kubectl create
- kubectl create namespace
- kubectl create secret
- kubectl create secret docker-registry
- kubectl create secret generic
- kubectl create configmap
- kubectl create serviceaccount
- kubectl replace
- kubectl patch
- kubectl delete
- kubectl edit
- kubectl apply
- kubectl namespace
- kubectl logs
- kubectl rolling-update
- kubectl scale
- kubectl cordon
- kubectl drain
- kubectl uncordon
- kubectl attach
- kubectl exec
- kubectl port-forward
- kubectl proxy
- kubectl run
- kubectl stop
- kubectl expose
- kubectl autoscale
- kubectl rollout
- kubectl rollout history
- kubectl rollout undo
- kubectl rollout pause
- kubectl rollout resume
- kubectl label
- kubectl annotate
- kubectl config
- kubectl config view
- kubectl config set-cluster
- kubectl config set-credentials
- kubectl config set-context
- kubectl config set
- kubectl config unset
- kubectl config current-context
- kubectl config use-context
- kubectl cluster-info
- kubectl api-versions
- kubectl version
- kubectl explain
- kubectl convert
#2 検証環境
- master,node1の2台構成。master,node1はホスト名.
- VMware Workstation 12 Player上で動作する仮想マシン。OSはCentOS7.2
+--- master ---+ +---- node1 ---+
| | | |
| CentOS7.2 | | CentOS7.2 |
| | | |
+--------------+ +--------------+
+----------------------------------+
| VMware Workstation 12 Player |
+----------------------------------+
#3 コマンドの使い方
##3.1 事前準備
bash-completionパッケージを導入することで、kubectlコマンドでTAB補完ができるようになります(便利になる)。
[root@master ~]# yum -y epel-release
[root@master ~]# yum -y bash-completion
bash-completionを有効にするため、一回ログアウトして、再度ログインしなおす(他の方法もある、と思います。。)
kubectlとタイプしたあと、"TAB"を押下すると、下記のサブコマンド一覧が表示される。
[root@master ~]# kubectl
annotate autoscale cordon drain expose namespace replace scale
api-versions cluster-info create edit get patch rolling-update uncordon
apply config delete exec label port-forward rollout version
attach convert describe explain logs proxy run
[root@master ~]# kubectl
##3.2 kubectl run/kubectl get/kubectl delete
Podを起動する。runに指定する文字列(下記例はnginx)は任意です。
[root@master ~]# kubectl run nginx --image=nginx
deployment "nginx" created
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-2040093540-lw9zo 1/1 Running 0 22s
Podがどのホスト(マスタ、またはノード)で動いてるのかを確認する。-o wideオプションを指定する。Podがmasterで動作していることがわかる。
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE NODE
nginx-2040093540-lw9zo 1/1 Running 0 28s master
Deploymentの状態を確認する。
[root@master ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 1 1 1 1 8m
Podを終了する。Podの名前ではなく、Deploymentの名前を指定すること。
[root@master ~]# kubectl delete deployment nginx
deployment "nginx" deleted
[root@master ~]# kubectl get pod
[root@master ~]#
Podを2つ起動する。"--replicas=2"を指定する。
[root@master ~]# kubectl run nginx --image=nginx --replicas=2
deployment "nginx" created
Podの状態を確認する。Podが2つ起動していることがわかる。
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE NODE
nginx-2040093540-5932k 1/1 Running 0 27s master
nginx-2040093540-mpnrw 1/1 Running 0 27s master
Podを終了する。
[root@master ~]# kubectl delete deployment nginx
deployment "nginx" deleted
[root@master ~]# kubectl get pod
[root@master ~]#
Podを起動する。
[root@master ~]# kubectl run nginx --image=nginx --env="TEST=test1"
deployment "nginx" created
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-3180491960-163ut 1/1 Running 0 31s
Podでbashを実行する。
[root@master ~]# kubectl exec nginx-3180491960-163ut -it bash
環境変数を表示する。
root@nginx-3180491960-163ut:/# echo $TEST
test1
root@nginx-3180491960-163ut:/# exit
exit
Podに"os=linux"というラベルをつけて起動する。
[root@master ~]# kubectl run nginx --image=nginx --labels="os=linux"
deployment "nginx" created
ラベルを確認する。"os=linux"というラベルが付いていることがわかる。
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-3952892669-fmqbt 1/1 Running 0 15s os=linux,pod-template-hash=3952892669
違うラベルを持ったPodを起動する。
[root@master ~]# kubectl run nginx1 --image=nginx --labels="os=windows"
deployment "nginx1" created
ラベルを確認する。ラベルが付いていることがわかる。
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-3952892669-fmqbt 1/1 Running 0 4m os=linux,pod-template-hash=3952892669
nginx1-3838991369-1yuur 1/1 Running 0 14s os=windows,pod-template-hash=3838991369
キーが"os"のものだけを表示する。
[root@master ~]# kubectl get pod -L os
NAME READY STATUS RESTARTS AGE OS
nginx-3952892669-fmqbt 1/1 Running 0 5m linux
nginx1-3838991369-1yuur 1/1 Running 0 1m windows
##3.3 kubectl describe (getの詳細バージョン)
リソースの一覧を表示する。"get"とタイプしたあとに"Tab"キーを押下する。
[root@master ~]# kubectl get
componentstatus ingress pod securitycontextconstraints
configmap job podsecuritypolicy service
daemonset limitrange podtemplate serviceaccount
deployment namespace replicaset thirdpartyresource
endpoints node replicationcontroller
event persistentvolume resourcequota
horizontalpodautoscaler persistentvolumeclaim secret
Podの状態を取得する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-2040093540-4g0um 1/1 Running 0 21s
Podの状態を取得する。getに比べより詳細な情報が得られる。
[root@master ~]# kubectl describe pod nginx-2040093540-4g0um
Name: nginx-2040093540-4g0um
Namespace: default
Node: master/192.168.0.100
Start Time: Thu, 03 Nov 2016 22:28:17 +0900
Labels: pod-template-hash=2040093540,run=nginx
Status: Running
IP: 10.1.57.2
Controllers: ReplicaSet/nginx-2040093540
Containers:
nginx:
Container ID: docker://fe90e85dcb1b58659e748b045c7487723ad07bc475d45b3322718820e07b0b72
Image: nginx
Image ID: docker://sha256:e43d811ce2f4986aa69bc8ba6c92f0789537f604d1601e0b6ec024e1c38062b4
Port:
QoS Tier:
memory: BestEffort
cpu: BestEffort
State: Running
Started: Thu, 03 Nov 2016 22:28:32 +0900
Ready: True
Restart Count: 0
Environment Variables:
Conditions:
Type Status
Ready True
No volumes.
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
38s 38s 1 {default-scheduler } Normal Scheduled Successfully assigned nginx-2040093540-4g0um to 127.0.0.1
36s 36s 1 {kubelet master} spec.containers{nginx} Normal Pulling pulling image "nginx"
25s 25s 1 {kubelet master} spec.containers{nginx} Normal Pulled Successfully pulled image "nginx"
24s 24s 1 {kubelet master} spec.containers{nginx} Normal Created Created container with docker id fe90e85dcb1b
23s 23s 1 {kubelet master} spec.containers{nginx} Normal Started Started container with docker id fe90e85dcb1b
[root@master ~]#
##3.4 kubectl create(リソースを作成する)
Deploymentのテンプレートファイルの内容は以下のとおり
[root@master ~]# cat nginx-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
テンプレートファイル名を引数にしてDeployment を作成する。
[root@master ~]# kubectl create -f nginx-deployment.yaml
deployment "nginx-deployment" created
作成したDeploymentの状態を確認する。Deploymentの名前は"nginx-deployment"であることがわかる。
[root@master ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 1 1 1 1 2m
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-2035384211-xggt8 1/1 Running 0 2m
Deploymentを削除する。
[root@master ~]# kubectl delete deployment nginx-deployment
deployment "nginx-deployment" deleted
Podの状態を確認する。Deploymentを削除すると、Podも停止していることがわかる。
[root@master ~]# kubectl get pod
[root@master ~]#
##3.5 kubectl create namespace(ネームスペースの作成)
name1,name2という名前のnamespaceを作成してみます。
[root@master ~]# kubectl create namespace name1
namespace "name1" created
[root@master ~]# kubectl create namespace name2
namespace "name2" created
作成したnamespaceを確認します。
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 61d
name1 Active 2m
name2 Active 2m
作成したnamespaceでPodの起動/終了を確認してみます。
name1とname2でそれぞれPodを起動する。
[root@master ~]# kubectl run nginx --image=nginx --namespace=name1
deployment "nginx" created
[root@master ~]# kubectl run nginx --image=nginx --namespace=name2
deployment "nginx" created
Podの状態を確認する。name1,name2でそれぞれPodが動作していることがわかる。
[root@master ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
name1 nginx-2040093540-npjtb 1/1 Running 0 44s
name2 nginx-2040093540-7njdh 1/1 Running 0 39s
Podを終了する。
[root@master ~]# kubectl delete deployment nginx --namespace=name1
deployment "nginx" deleted
[root@master ~]# kubectl delete deployment nginx --namespace=name2
deployment "nginx" deleted
Podの状態を確認する。
[root@master ~]# kubectl get pod --all-namespaces
[root@master ~]#
##3.6 kubectl create secret (secretを作成する)
secretとしてPodにマウントする情報は以下の2つの情報。
[root@master secrets]# cat username.txt
foo
[root@master secrets]# cat pass.txt
12345
"mysecret"という名前のsecretを作成する。
[root@master secrets]# kubectl create secret generic mysecret --from-file=./username.txt --from-file=./pass.txt
secret "mysecret" created
secretの状態を確認する。
[root@master secrets]# kubectl get secret
NAME TYPE DATA AGE
mysecret Opaque 2 5s
secretの詳細情報を確認する。
[root@master secrets]# kubectl describe secret mysecret
Name: mysecret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
username.txt: 4 bytes <= ファイルの中身そのものはでなく、ファイルのバイト数が表示される。
pass.txt: 6 bytes <= ファイルの中身そのものはでなく、ファイルのバイト数が表示される。
Podを起動するためのテンプレートを確認する。/tmp/mysecにmysecretという名前のsecretをマウントする。
[root@master secrets]# cat secret-pod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
name: secretstest1 <= Podに付けるラベル名を指定する(任意の名前)
name: secretstest <= Podの名前を指定する(任意の名前)
spec:
volumes:
- name: "secretstest"
secret:
secretName: mysecret <= マウントするsecretの名前を指定する。
containers:
- image: nginx:1.7.1
name: awebserver
volumeMounts:
- mountPath: "/tmp/mysec" <= secretをマウントするPod内のパス。
name: "secretstest"
Podを起動する。
[root@master secrets]# kubectl create -f secret-pod.yaml
pod "secretstest" created
Podの状態を確認する。
[root@master secrets]# kubectl get pod
NAME READY STATUS RESTARTS AGE
secretstest 1/1 Running 0 31s
Podのラベルを確認する。
[root@master secrets]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
secretstest 1/1 Running 0 35s name=secretstest1
secretの中身を確認する。
[root@master secrets]# kubectl exec -it secretstest bash
root@secretstest:/usr/local/nginx/html# cat /tmp/mysec/pass.txt
12345
root@secretstest:/usr/local/nginx/html# cat /tmp/mysec/username.txt
foo
root@secretstest:/usr/local/nginx/html# exit
exit
[root@master secrets]#
##3.7 kubectl create configmap (configmapを作成する)
configmapは、ホストからPodに設定情報(key,valueの組)を渡すときに使うリソースです。
-----------------------------------
1. ConfigMapを作成する。
-----------------------------------
ConfigMapを作成する。
[root@master ~]# vi config.yaml
[root@master ~]# cat config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: test-config
data:
# key, value形式で設定を記述する
test1: '11111'
test2: '22222'
ConfigMapを作成する。
[root@master ~]# kubectl create -f config.yaml
configmap "test-config" created
作成したConfigMapを確認する。
[root@master ~]# kubectl get configmap
NAME DATA AGE
test-config 2 11s
作成したConfigMapの詳細情報を確認する。
[root@master ~]# kubectl describe configmap test-config
Name: test-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
test1: 5 bytes <===== '11111'のサイズが表示される。
test2: 5 bytes <===== '22222'のサイズが表示される。
-----------------------------------
2. 作成したConfigMapをPodに渡す
-----------------------------------
Podの定義ファイルを作成する。
[root@master ~]# vi pod.yaml
[root@master ~]# cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: example-container
image: busybox
# あとからexecで操作するためsleepさせておく
command: ["sleep", "3600"]
# ConfigMapをマウントする
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
# ConfigMapリソースの名前を指定する(kubectl get configmapで得られる名前)
name: test-config
Podを起動する。
[root@master ~]# kubectl create -f pod.yaml
pod "test-pod" created
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 26s
Podのshを起動して、ConfigMapのKey,Valueを確認する。
[root@master ~]# kubectl exec -it test-pod sh
/ # cat /etc/config/test1
11111/ #
/ # cat /etc/config/test2
22222/ #
-----------------------------------------------------------
3. 動的にConfigMapを変更する。変更したConfigMapをPodで参照する。
------------------------------------------------------------
ConfigMapを動的に変更する。
[root@master ~]# kubectl edit configmap test-config
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
test1: "88888" <=== '11111'から'88888'に変更する。
test2: "99999" <=== '22222'から'99999'に変更する。
kind: ConfigMap
"/tmp/kubectl-edit-np3nb.yaml" 16L, 503C
Podを起動する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 4m
ConfigMapのValueを確認する。Valueが変更されていることが確認できる。
[root@master ~]# kubectl exec -it test-pod sh
/ # cat /etc/config/test1
88888/ #
/ # cat /etc/config/test2
99999/ #
/ # exit
##3.8 kubectl exec (Podでコマンドを実行する)
Podを起動する。
[root@master2 ~]# kubectl run nginx --image=nginx
deployment "nginx" created
Podの状態を確認する。
[root@master2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-2040093540-69r4e 1/1 Running 0 13s
Podでコマンドを実行する。
[root@master2 ~]# kubectl exec nginx-2040093540-69r4e -it bash
psコマンドを実行する。nginxが動いていることがわかる。
root@nginx-2040093540-69r4e:/# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.7 0.2 31760 2856 ? Ss 01:17 0:00 nginx: master
nginx 8 0.0 0.1 32152 1408 ? S 01:17 0:00 nginx: worker
root 9 4.8 0.1 20216 1912 ? Ss 01:17 0:00 bash
root 17 0.0 0.1 17492 1148 ? R+ 01:17 0:00 ps aux
unameコマンドを実行する。Linuxの版数が確認できる。
root@nginx-2040093540-69r4e:/# uname -r
3.10.0-327.el7.x86_64
コンテナから抜ける
root@nginx-2040093540-69r4e:/# exit
exit
[root@master2 ~]#
----------------------------------------------------
1つのPodで2つのコンテナを起動した場合のexec実施例
----------------------------------------------------
Pod定義ファイルを作成する。
[root@master2 ~]# vi multi_os.yaml
[root@master2 ~]# cat multi_os.yaml
apiVersion: v1
kind: Pod
metadata:
name: multiple-container
spec:
containers:
- name: busybox
image: busybox
command: ["sleep", "3600"]
- name: centos7
image: centos
command: ["sleep", "3600"]
Podを起動する。
[root@master2 ~]# kubectl create -f multi_os.yaml
pod "multiple-container" created
busyboxのコンテナでコマンドを実行する。
[root@master2 ~]# kubectl exec multiple-container -c busybox -it sh
/ # uname -r
3.10.0-327.el7.x86_64
/ # exit
[root@master2 ~]#
centosのコンテナでコマンドを実行する。
[root@master2 ~]# kubectl exec multiple-container -c centos7 -it bash
[root@multiple-container /]# uname -r
3.10.0-327.el7.x86_64
[root@multiple-container /]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@multiple-container /]# exit
exit
[root@master2 ~]#
----------------------------------------------------
Podの詳細情報の確認
----------------------------------------------------
[root@master2 ~]# kubectl describe pod multiple-container
Name: multiple-container
Namespace: default
Node: master2/192.168.0.20
Start Time: Sat, 07 Jan 2017 11:05:13 +0900
Labels: <none>
Status: Running
IP: 172.17.0.2
Controllers: <none>
Containers:
busybox:
Container ID: docker://075b790da0ff3404d9567e92a9ac5d2efb55231734633723f5fc0143ea866822
Image: busybox
Image ID: docker://sha256:8a4698b1752b8142df16b73eca10c8b03fbd2ccbbd03cfd47882f04ace12de66
Port:
Command:
sleep
3600
QoS Tier:
memory: BestEffort
cpu: BestEffort
State: Running
Started: Sat, 07 Jan 2017 11:05:29 +0900
Ready: True
Restart Count: 0
Environment Variables:
centos7:
Container ID: docker://780ded7a424d58315ab2ea8b580eef7c2d11929286abfe37be899f6a8b6ac931
Image: centos
Image ID: docker://sha256:67591570dd29de0e124ee89d50458b098dbd83b12d73e5fdaf8b4dcbd4ea50f8
Port:
Command:
sleep
3600
QoS Tier:
memory: BestEffort
cpu: BestEffort
State: Running
Started: Sat, 07 Jan 2017 11:05:20 +0900
Ready: True
Restart Count: 0
Environment Variables:
Conditions:
Type Status
Ready True
-以下、略-
##3.9 kubectl scale(Podの数を増減する)
Podを1つ起動する。
[root@master ~]# kubectl run nginx --image=nginx
deployment "nginx" created
Podの状態を確認する。Podが1つ動いていることがわかる。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-2040093540-xfxj6 1/1 Running 0 18s
Podを2個に増やす。
[root@master ~]# kubectl scale deployment nginx --replicas=2
deployment "nginx" scaled
Podの状態を確認する。Podが2個になったことがわかる。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-2040093540-d2c6a 1/1 Running 0 21s
nginx-2040093540-xfxj6 1/1 Running 0 1m
Podを終了する。
[root@master ~]# kubectl delete deployment nginx
deployment "nginx" deleted
[root@master ~]# kubectl get pod
[root@master ~]#
##3.10 kubectl cordon(Pod配備禁止)/kubectl uncordon(Pod配備禁止の解除)
kubectl cordonもkubectl drainも、指定したホストへのPodの新規配備を禁止する。違いは、以下のとおり。
- kubectl cordon : kubectl cordonで指定したホストでPodが動作中の場合、そのPodはそのホストで動作したまま。
- kubectl drain : kubectl drainで指定したホストでPodが動作中の場合、Podを他のホストに移動する。
ホスト(マスタとノード)の状態を確認する。
[root@master ~]# kubectl get node
NAME STATUS AGE
master Ready 59d
node1 Ready 61d
Podを4つ起動する。
[root@master ~]# kubectl run nginx --image=nginx --replicas=4
deployment "nginx" created
Podの状態を確認する。マスタ(master)とノード(node1)で2個ずつ動いていることがわかる。
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE NODE
nginx-2040093540-147wy 1/1 Running 0 42s master
nginx-2040093540-s5lu3 1/1 Running 0 42s node1
nginx-2040093540-st25o 1/1 Running 0 42s node1
nginx-2040093540-w8rxu 1/1 Running 0 42s master
Podを終了する。
[root@master ~]# kubectl delete deployment nginx
deployment "nginx" deleted
マスタ(master)へのPod配備を禁止する。
[root@master ~]# kubectl cordon master
node "master" cordoned
ホストの状態を確認する。マスタへのPod配備が禁止(SchedulingDisabled)になっていることがわかる。
[root@master ~]# kubectl get node
NAME STATUS AGE
master Ready,SchedulingDisabled 59d
node1 Ready 61d
Podを4個起動する。
[root@master ~]# kubectl run nginx --image=nginx --replicas=4
deployment "nginx" created
Podの状態を確認する。4個すべてがノード(node1)で動いていることがわかる。masterへのpod配備禁止が確認できたことがわかる。
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE NODE
nginx-2040093540-2e7pe 1/1 Running 0 47s node1
nginx-2040093540-aebg5 1/1 Running 0 47s node1
nginx-2040093540-jgw2y 1/1 Running 0 47s node1
nginx-2040093540-wmvem 1/1 Running 0 47s node1
マスタへのPod配備禁止を解除する。
[root@master ~]# kubectl uncordon master
node "master" uncordoned
ホストの状態を確認する。マスタのPod配備禁止が解除されていることがわかる。
[root@master ~]# kubectl get node
NAME STATUS AGE
master Ready 59d
node1 Ready 61d
##3.11 kubectl drain(Pod配備禁止)/kubectl uncordon(Pod配備禁止の解除)
Podを2つ起動する。
[root@master ~]# kubectl run nginx --image=nginx --replicas=2
deployment "nginx" created
Podの状態を確認する。マスタ(master)とノード(node1)でPodが1個ずつ動いている。
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE NODE
nginx-2040093540-2oix4 1/1 Running 0 20s node1
nginx-2040093540-pkmvj 1/1 Running 0 20s master
マスタ(master)をPod配備禁止にする。
[root@master ~]# kubectl drain master
node "master" cordoned
error: pods not managed by ReplicationController, Job, or DaemonSet: nginx-2040093540-pkmvj (use --force to override)
Pod配備禁止を実行する。
配備禁止に指定するホストでDeploymentで管理するPodが稼働中の場合は、--forceオプションを指定する必要がある。
[root@master ~]# kubectl drain --force master
node "master" already cordoned
WARNING: About to delete these pods not managed by ReplicationController, Job, or DaemonSet: nginx-2040093540-pkmvj
pod "nginx-2040093540-pkmvj" deleted
node "master" drained
ホストの状態を確認する。マスタがPod配備禁止になっていることがわかる。
[root@master ~]# kubectl get node
NAME STATUS AGE
master Ready,SchedulingDisabled 59d
node1 Ready 61d
Podの状態を確認する。
マスタ(master)で動いていたPodがノード(node1)に移動して2つともノード(node1)で動いていることがわかる。
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE NODE
nginx-2040093540-2oix4 1/1 Running 0 1m node1
nginx-2040093540-ab2l4 1/1 Running 0 31s node1
Pod配備禁止を解除する。
[root@master ~]# kubectl uncordon master
node "master" uncordoned
ホストの状態を確認する。Pod配備禁止が解除されたことがわかる。
[root@master ~]# kubectl get node
NAME STATUS AGE
master Ready 59d
node1 Ready 61d
##3.12 kubectl attach(動作中のPodに接続する)
本コマンドの用途がわからない。。。
https://github.com/kubernetes/kubernetes/issues/23335
Podを起動する。
[root@master ~]# kubectl run httpd --image=httpd
deployment "httpd" created
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
httpd-2047761252-mp52s 1/1 Running 0 14s
Podにattachする。
[root@master ~]# kubectl attach httpd-2047761252-mp52s -i
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Sat Jan 07 02:49:25.819545 2017] [mpm_event:notice] [pid 1:tid 139689717176192] AH00489: Apache/2.4.25 (Unix) configured -- resuming normal operations
[Sat Jan 07 02:49:25.820892 2017] [core:notice] [pid 1:tid 139689717176192] AH00094: Command line: 'httpd -D FOREGROUND'
##3.13 kubectl rollout
###3.13.1 kubectl rollout history(更新履歴を表示する)
###3.13.2 kubectl rollout undo(操作を取り消す。過去の状態に戻る)
Podを起動する。履歴を残すために、--recordオプションを付ける。
[root@master ~]# kubectl run nginx --image=nginx:1.7.1 --record
deployment "nginx" created
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-4193804003-j9lsd 1/1 Running 0 7s
Deploymentの更新履歴を確認する。
[root@master ~]# kubectl rollout history deployment/nginx
deployments "nginx":
REVISION CHANGE-CAUSE
1 kubectl run nginx --image=nginx:1.7.1 --record
イメージの版数を変更(1.7.1 -> 1.9.1)する。エディタ(vi等)が起動するので、版数を変更する。
[root@master ~]# kubectl edit deployment nginx
- image: nginx:1.7.1
↓変更
- image: nginx:1.9.1
deployment "nginx" edited
履歴を確認する。
[root@master ~]# kubectl rollout history deployment nginx
deployments "nginx":
REVISION CHANGE-CAUSE
1 kubectl run nginx --image=nginx:1.7.1 --record
2 kubectl edit deployment nginx
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-45047525-1xrp3 1/1 Running 0 57s
イメージの版数が1.7.1から1.9.1になったことがわかる。
[root@master ~]# kubectl describe pod nginx-45047525-1xrp3|grep "Image:"
Image: nginx:1.9.1
コンテナの状態を確認する。1.9.1版をもとに起動したコンテナということがわかる。
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c3bcac0febb nginx:1.9.1 "nginx -g 'daemon off" About a minute ago Up About a minute k8s_nginx.e0d0df54_nginx-45047525-1xrp3_default_f1902308-a413-11e6-b2c9-000c291946c5_1d70a802
イメージの版数を変更(1.9.1 -> 1.9.2)する。
[root@master ~]# kubectl edit deployment nginx
- image: nginx:1.9.1
- image: nginx:1.9.2
deployment "nginx" edited
履歴を確認する。3回分の更新履歴を確認することができる。
[root@master ~]# kubectl rollout history deployment nginx
deployments "nginx":
REVISION CHANGE-CAUSE
1 kubectl run nginx --image=nginx:1.7.1 --record
2 kubectl edit deployment nginx
3 kubectl edit deployment nginx
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-117530342-onbvj 1/1 Running 0 38s
イメージの版数が1.9.1から1.9.2になったことがわかる。
[root@master ~]# kubectl describe pod nginx-117530342-onbvj|grep "Image:"
Image: nginx:1.9.2
コンテナの状態を確認する。1.9.2版をもとに起動したコンテナということがわかる。
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20d6aaed4863 nginx:1.9.2 "nginx -g 'daemon off" About a minute ago Up About a minute k8s_nginx.e2fedf55_nginx-117530342-onbvj_default_49ebf179-a414-11e6-b2c9-000c291946c5_13a2ecc9
REVISION 1の状態に戻す。
[root@master ~]# kubectl rollout undo deployment nginx --to-revision=1
deployment "nginx" rolled back
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-4193804003-1fx52 1/1 Running 0 34s
イメージの版数が1.9.2から1.7.1になったことがわかる。
[root@master ~]# kubectl describe pod nginx-4193804003-1fx52|grep "Image:"
Image: nginx:1.7.1
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f30ae136f042 nginx:1.7.1 "nginx" 51 seconds ago Up 50 seconds k8s_nginx.dc70df52_nginx-4193804003-1fx52_default_50748203-a415-11e6-b2c9-000c291946c5_15fe34ac
REVISION 2の状態に戻す。
[root@master ~]# kubectl rollout undo deployment nginx --to-revision=2
deployment "nginx" rolled back
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-45047525-iw6w6 1/1 Running 0 6s
イメージの版数が1.7.1から1.9.1になったことがわかる。
[root@master ~]# kubectl describe pod nginx-45047525-iw6w6|grep "Image:"
Image: nginx:1.9.1
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1268824ad1c5 nginx:1.9.1 "nginx -g 'daemon off" 17 seconds ago Up 16 seconds k8s_nginx.e0d0df54_nginx-45047525-iw6w6_default_94a637f0-a415-11e6-b2c9-000c291946c5_c1d96f5c
###3.13.3 kubectl rollout pause
###3.13.4 kubectl rollout resume
##3.14 kubectl label(Podへのラベル貼付、削除、上書き)
Podを起動する。
[root@master ~]# kubectl run nginx --image=nginx
deployment "nginx" created
Podのラベルを確認する。
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-2040093540-ujjzd 1/1 Running 0 18s pod-template-hash=2040093540,run=nginx
ラベル(os=linux)を追加する。
[root@master ~]# kubectl label pod nginx-2040093540-ujjzd os=linix
pod "nginx-2040093540-ujjzd" labeled
ラベルを確認する。os=linuxというラベルが追加されたことがわかる。
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-2040093540-ujjzd 1/1 Running 0 1m os=linix,pod-template-hash=2040093540,run=nginx
ラベル(os=linux)を削除する。
キーの後にハイフンを指定する。以下の例だとOSの後に「-」を指定する。
[root@master ~]# kubectl label pod nginx-2040093540-ujjzd os-
pod "nginx-2040093540-ujjzd" labeled
ラベルを確認する。ラベル(os=linux)が削除されたことがわかる。
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-2040093540-ujjzd 1/1 Running 0 3m pod-template-hash=2040093540,run=nginx
Podの状態を確認する。
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-2040093540-ujjzd 1/1 Running 0 6m pod-template-hash=2040093540,run=nginx
ラベルを書き換える。run=nginxというラベルをrun=hogeに書き換える。
[root@master ~]# kubectl label --overwrite pod nginx-2040093540-ujjzd run=hoge
pod "nginx-2040093540-ujjzd" labeled
Podの状態を確認する。
run=nginxというラベルを持ったPodがいなくなったため、もう1つPodを起動していることがわかる。
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-2040093540-32i08 1/1 Running 0 1m pod-template-hash=2040093540,run=nginx
nginx-2040093540-ujjzd 1/1 Running 0 9m pod-template-hash=2040093540,run=hoge
新たに起動したPodのラベルをrun=hogeからrun=nginxに戻す。
[root@master ~]# kubectl label --overwrite pod nginx-2040093540-ujjzd run=nginx
pod "nginx-2040093540-ujjzd" labeled
Podの状態を確認する。
run=nginxというラベルを持ったPodが2個になったため、Podの数を2個から1個に減らしたことがわかる。
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-2040093540-ujjzd 1/1 Running 0 14m pod-template-hash=2040093540,run=nginx
##3.15 kubectl annotate(リソースに注釈の追加、削除を行う)
-----------------------------------------
1. 注釈(annotate)の追加、削除を行う。
-----------------------------------------
Podを起動する。
[root@master1 ~]# kubectl run nginx --image=nginx
deployment "nginx" created
Podの状態を確認する。
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-2040093540-vb1qg 1/1 Running 0 1m
Podに注釈(os='centos6')を付ける。
[root@master1 ~]# kubectl annotate pod nginx-2040093540-vb1qg os='centos6'
pod "nginx-2040093540-vb1qg" annotated
注釈を確認する。
[root@master1 ~]# kubectl get pod nginx-2040093540-vb1qg -o yaml|grep -w os
os: centos6
注釈を削除する。descriptionのあとに「-」を付ける。
[root@master1 ~]# kubectl annotate pod nginx-2040093540-vb1qg os-
pod "nginx-2040093540-vb1qg" annotated
注釈を確認する。注釈が削除できたことがわかる。
[root@master1 ~]# kubectl get pod nginx-2040093540-vb1qg -o yaml|grep -w os
[root@master1 ~]#
-----------------------------------------------
2. 注釈を上書きする(--overwriteオプションを使う)
-----------------------------------------------
Podに注釈(os='centos6')を付ける。
[root@master1 ~]# kubectl annotate pod nginx-2040093540-vb1qg os='centos6'
pod "nginx-2040093540-vb1qg" annotated
注釈を確認する。。
[root@master1 ~]# kubectl get pod nginx-2040093540-vb1qg -o yaml|grep -w os
os: centos6
注釈を上書きする。os='centos6' => os='centos7'
[root@master1 ~]# kubectl annotate --overwrite pod nginx-2040093540-vb1qg os='centos7'
pod "nginx-2040093540-vb1qg" annotated
注釈を確認する。注釈が上書きされたことがわかる。
[root@master1 ~]# kubectl get pod nginx-2040093540-vb1qg -o yaml|grep -w os
os: centos7
##3.16 kubectl edit(定義情報変更)/kubectl apply(定義情報変更)
editもapplyもリソースの定義情報を変更するために使う。違いは以下のとおり。
- editはエディタ(vi等)を使って、リソースの定義情報を変更するときに使う。
- applyはファイルや標準入力から、リソースの定義情報を変更するときに使う。
Podを起動する。イメージは1.7.1版を使う
[root@master ~]# kubectl run nginx --image=nginx:1.7.1
deployment "nginx" created
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-4193804003-rqoun 1/1 Running 0 7s
イメージの版数を確認する。1.7.1であることがわかる。
[root@master ~]# kubectl describe pod nginx-4193804003-rqoun|grep "Image:"
Image: nginx:1.7.1
イメージの版数を1.7.1から1.9.1に変更する。
[root@master ~]# kubectl edit deployment nginx
- image: nginx:1.7.1
↓
- image: nginx:1.9.1
deployment "nginx" edited
Podの状態を確認する。1.9.1版のイメージをもとにPodが起動していることがわかる。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-45047525-8tklr 1/1 Running 0 2m
[root@master ~]# kubectl describe pod nginx-45047525-8tklr |grep "Image:"
Image: nginx:1.9.1
dockerコマンドでも確認してみる。イメージの版数が1.9.1にアップデートされている。
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
007830b209b4 nginx:1.9.1 "nginx -g 'daemon off" About a minute ago Up About a minute k8s_nginx.e0d0df54_nginx-45047525-8tklr_default_fc4049e3-a3b0-11e6-815e-000c291946c5_42df405c
##3.17 kubectl replace(リソースを置き換える。いったんリソースを削除して作り直す)
イメージの版数を確認する。版数は1.7.1
[root@master ~]# cat nginx-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.1
ports:
- containerPort: 80
Podを起動する。
[root@master ~]# kubectl create -f nginx-deployment.yaml
deployment "nginx-deployment" created
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-1406762891-5typw 1/1 Running 0 23s
起動したPodのイメージ版数を確認する。
[root@master ~]# kubectl get pod nginx-deployment-1406762891-5typw -o yaml|grep "image:"
- image: nginx:1.7.1
image: nginx:1.7.1
イメージの版数を変更(1.7.1->1.9.1)する。
[root@master ~]# vi nginx-deployment.yaml
[root@master ~]# cat nginx-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.9.1
ports:
- containerPort: 80
[root@master ~]# kubectl replace -f nginx-deployment.yaml
deployment "nginx-deployment" replaced
Podの状態を確認する。Podの名前が変わっていることがわかる。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-1564180365-qplk2 1/1 Running 0 13s
起動したPodのイメージ版数を確認する。
[root@master ~]# kubectl get pod nginx-deployment-1564180365-qplk2 -o yaml|grep "image:"
- image: nginx:1.9.1
image: nginx:1.9.1
Dockerコマンドでも確認してみる。イメージの版数が1.9.1になっていることがわかる。
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6116aeec2e4 nginx:1.9.1 "nginx -g 'daemon off" 57 seconds ago Up 55 seconds k8s_nginx.f50b001f_nginx-deployment-1564180365-qplk2_default_7b606b07-a5a9-11e6-991f-000c291946c5_a8b717af3bde29fcacea
##3.18 kubectl rolling-update(リソースを動的に変更する)
テンプレートの内容を確認する。イメージの版数は1.7.1
[root@master ~]# cat nginx-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 1
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.1
ports:
- containerPort: 80
Podを起動する。
[root@master ~]# kubectl create -f nginx-rc.yaml
replicationcontroller "nginx" created
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-du0qx 0/1 ContainerCreating 0 4s
イメージの版数を確認する。
[root@master ~]# kubectl get pod nginx-du0qx -o yaml|grep "image:"
- image: nginx:1.7.1
image: nginx:1.7.1
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6381c2a09d64 nginx:1.7.1 "nginx" About a minute ago Up About a minute k8s_nginx.eff1001d_nginx-du0qx_default_b39e9ff4-a5ab-11e6-991f-000c291946c5_b39a845b
ローリングアップデートを実行する。イメージの版数を1.7.1から1.9.1にアップデートする。
[root@master ~]# kubectl rolling-update nginx --image=nginx:1.9.1
Created nginx-b1c0dfc3c6acc641415953ffec068cfd
Scaling up nginx-b1c0dfc3c6acc641415953ffec068cfd from 0 to 1, scaling down nginx from 1 to 0 (keep 1 pods available, don't exceed 2 pods)
Scaling nginx-b1c0dfc3c6acc641415953ffec068cfd up to 1
- しばらく待つ
Scaling nginx down to 0
Update succeeded. Deleting old controller: nginx
Renaming nginx-b1c0dfc3c6acc641415953ffec068cfd to nginx
replicationcontroller "nginx" rolling updated
上記「しばらく待つ」のとき、別の端末でPodの状態を確認する。
更新前のPodと新しいPodの2つが起動していることがわかる。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-b1c0dfc3c6acc641415953ffec068cfd-w7ka2 1/1 Running 0 9s
nginx-du0qx 1/1 Running 0 11m
rolling-updateが終了した後、Podの状態を確認する。新しく起動したPodだけが動いていることがわかる。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-b1c0dfc3c6acc641415953ffec068cfd-w7ka2 1/1 Running 0 2m
##3.19 kubectl logs(Podが標準出力に出力するメッセージを表示する)
Podを起動する。
[root@master ~]# kubectl run httpd --image=httpd
deployment "httpd" created
Podの状態を確認する。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
httpd-2047761252-vrz7s 1/1 Running 0 2m
Deploymentの状態を確認する。
[root@master ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
httpd 1 1 1 1 2m
Serviceを作成する。ホストのポート番号8888をコンテナのポート番号80にマップする。
[root@master ~]# kubectl expose deployment httpd --port=8888 --target-port=80
service "httpd" exposed
Serviceを作成する。--portはホストのポート番号、--target-portはPodのポート番号。
[root@master ~]# kubectl expose deployment httpd --port=8888 --target-port=80
service "httpd" exposed
Serviceとエンドポイント情報を確認する。ホスト側(10.254.92.77:8888) <-> Pod(10.1.72.2:80)の関係がわかる。
[root@master ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpd 10.254.92.77 <none> 8888/TCP 15m
[root@master ~]# kubectl get endpoints
NAME ENDPOINTS AGE
httpd 10.1.72.2:80 15m
Pod(httpd)にアクセスする。
[root@master ~]# curl http://10.254.92.77:8888
<html><body><h1>It works!</h1></body></html>
HTTPアクセスしたログが出力される。
[root@master ~]# kubectl logs httpd-2047761252-vrz7s
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.1.72.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.1.72.2. Set the 'ServerName' directive globally to suppress this message
[Sun Nov 06 12:06:42.420907 2016] [mpm_event:notice] [pid 1:tid 140692115355520] AH00489: Apache/2.4.23 (Unix) configured -- resuming normal operations
[Sun Nov 06 12:06:42.446383 2016] [core:notice] [pid 1:tid 140692115355520] AH00094: Command line: 'httpd -D FOREGROUND'
192.168.0.100 - - [06/Nov/2016:12:07:33 +0000] "GET / HTTP/1.1" 200 45
もう一度HTTPアクセスする。
[root@master ~]# curl http://10.254.92.77:8888
<html><body><h1>It works!</h1></body></html>
2回目のHTTPアクセスのログが出力されていることがわかる。
[root@master ~]# kubectl logs httpd-2047761252-vrz7s
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.1.72.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.1.72.2. Set the 'ServerName' directive globally to suppress this message
[Sun Nov 06 12:06:42.420907 2016] [mpm_event:notice] [pid 1:tid 140692115355520] AH00489: Apache/2.4.23 (Unix) configured -- resuming normal operations
[Sun Nov 06 12:06:42.446383 2016] [core:notice] [pid 1:tid 140692115355520] AH00094: Command line: 'httpd -D FOREGROUND'
192.168.0.100 - - [06/Nov/2016:12:07:33 +0000] "GET / HTTP/1.1" 200 45
192.168.0.100 - - [06/Nov/2016:12:07:52 +0000] "GET / HTTP/1.1" 20
最後の2行だけログを出力する。--tail=2 オプションを付ける。
[root@master ~]# kubectl logs --tail=2 httpd-2047761252-vrz7s
192.168.0.100 - - [06/Nov/2016:12:07:33 +0000] "GET / HTTP/1.1" 200 45
192.168.0.100 - - [06/Nov/2016:12:07:52 +0000] "GET / HTTP/1.1" 200 45
オプション使用例 | 意味 |
---|---|
--tail=2 | 最後の2行だけログを出力する |
--since=10s | 最後の10秒間のログを出力する |
--since=1m | 最後の1分間のログを出力する |
--since=2H | 最後の2時間のログを出力する |
##3.20 kubectl config(クラスタ管理を行う)
configコマンドを使って、コンテキスト切り替えを実行してみます。
コンテキストとは、ユーザとクラスタの組を意味します。
1.4のkubectl configの使い方
・master1,master2の2台構成。OSはCentOS7.2。
・master1で構成する環境をローカルクラスタ、master2で構成する環境をリモートクラスタと呼ぶことにします。
・master1,master2はマスタ機能を持っている。つまり、kube-apiserverが動作している。
(注)検証環境が貧弱なので、クラスタ内のホストはマスタのみ。ノードはありません。
本実施例では、master1でコンテキストの切り替えコマンドを実行することで、
ローカルクラスタ、リモートクラスタのPodの状態が参照できることを確認してみます。
なお、セキュリティについては考慮していません。
[root@master1 ~]# kubectl run local-nginx --image=nginx
deployment "local-nginx" created
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
local-nginx-1294491604-jnqwn 1/1 Running 0 19s
[root@master2 ~]# kubectl run remote-nginx --image=nginx
deployment "remote-nginx" created
[root@master2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
remote-nginx-1644388566-i26w1 1/1 Running 0 13m
これ以降の作業は全てローカルクラスタ(master1)で行う。
コンテキストの作成は、set-credentials -> set-cluster -> set-context の順でサブコマンドを実行する。
ユーザを作成する。ローカルクラスタ、リモートクラスタ用に2つ作成する。"local-user","remote-user"は任意の名前で良い。
[root@master1 ~]# kubectl config set-credentials local-user --username=hana --password=hana
user "local-user" set.
[root@master1 ~]# kubectl config set-credentials remote-user --username=shin --password=shin
user "remote-user" set.
クラスタを作成する。ローカルクラスタ、リモートクラスタ用に2つ作成する。"localhost","remotehost"は任意の名前で良い。
[root@master1 ~]# kubectl config set-cluster localhost --insecure-skip-tls-verify=true --server=http://master1:8080
cluster "localhost" set.
[root@master1 ~]# kubectl config set-cluster remotehost --insecure-skip-tls-verify=true --server=http://master2:8080
cluster "remotehost" set.
コンテキストを作成する。コンテキストを作成することで、ユーザとクラスタが紐付けされる。
[root@master1 ~]# kubectl config set-context local-contex --user=local-user --cluster=localhost
context "local-contex" set.
[root@master1 ~]# kubectl config set-context remote-contex --user=remote-user --cluster=remotehost
context "remote-contex" set.
使用するコンテキストを"local-contex"に切り替える
[root@master1 ~]# kubectl config use-context local-contex
switched to context "local-contex".
コンテキストを確認する。"local-contex"に切り替わったことがわかる。
[root@master1 ~]# kubectl config current-context
local-contex
Podの状態を確認する。ローカルクラスタのPodが動作していることが確認できる。
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
local-nginx-1294491604-jnqwn 1/1 Running 0 2m
使用するコンテキストを"remote-contex"に切り替える
[root@master1 ~]# kubectl config use-context remote-contex
switched to context "remote-contex".
コンテキストを確認する。"remote-contex"に切り替わったことがわかる。
[root@master1 ~]# kubectl config current-context
remote-contex
Podの状態を確認する。リモートクラスタのPodが動作していることが確認できる。
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
remote-nginx-1644388566-i26w1 1/1 Running 0 3m
コンテキストを確認する。"remote-contex"であることがわかる。
[root@master1 ~]# kubectl config current-context
remote-contex
Podを起動する。
[root@master1 ~]# kubectl run httpd --image=httpd
deployment "httpd" created
Podを確認する。nginxに加え、httpdのPodも起動していることがわかる。
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
httpd-2047761252-6ywrg 1/1 Running 0 55s
remote-nginx-1644388566-i26w1 1/1 Running 0 1h
master2でもPodの状態を確認してみる。httpdのPodが起動していることがわかる。
[root@master2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
httpd-2047761252-6ywrg 1/1 Running 0 1m
remote-nginx-1644388566-i26w1 1/1 Running 0 1h
[root@master2 ~]#
リモートクラスタのPodを全て終了する。
[root@master1 ~]# kubectl delete deployment remote-nginx
deployment "remote-nginx" deleted
[root@master1 ~]# kubectl delete deployment httpd
deployment "httpd" deleted
Podの状態を確認する。全てのPodが終了したことが確認できる。
[root@master1 ~]# kubectl get pod
[root@master1 ~]#
[root@master1 ~]# kubectl config view
apiVersion: v1
clusters:
- cluster:
insecure-skip-tls-verify: true
server: http://master1:8080
name: localhost
- cluster:
insecure-skip-tls-verify: true
server: http://master2:8080
name: remotehost
contexts:
- context:
cluster: localhost
user: local-user
name: local-contex
- context:
cluster: remotehost
user: remote-user
name: remote-contex
current-context: remote-contex
kind: Config
preferences: {}
users:
- name: local-user
user:
password: hana
username: hana
- name: remote-user
user:
password: shin
username: shin
[root@master1 ~]#
なお、上記コマンドは、~/.kube/configに格納されている設定を表示しています。
##3.21 stop (廃止予定なので使わないこと)
以下、man kubectl-stop より引用
The stop command is deprecated, all its functionalities are covered by delete command.
See 'kubectl delete --help' for more details.
##3.22 kubectl version (kubernetesの版数を表示する)
kubernetes 1.2を使っていることがわかる。
[root@master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"ec7364b6e3b155e78086018aa644057edbe196e5", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"ec7364b6e3b155e78086018aa644057edbe196e5", GitTreeState:"clean"}
##3.23 kubectl cluster-info(クラスタの情報を表示する)
[root@master ~]# kubectl cluster-info
Kubernetes master is running at http://localhost:8080
##3.24 kubectl api-versions(サポートしているAPIバージョンを表示する)
[root@master ~]# kubectl api-versions
autoscaling/v1
batch/v1
extensions/v1beta1
v1
##3.25 kubectl convert(ファイル形式を変換(yaml<=>json)する。)
[root@master ~]# cat nginx-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
[root@master ~]# kubectl convert -f nginx-deployment.yaml --local -o json
running in local mode...
{
"kind": "Deployment",
"apiVersion": "extensions/v1beta1",
"metadata": {
"name": "nginx-deployment",
"creationTimestamp": null,
"labels": {
"app": "nginx"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "nginx"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "nginx"
}
},
"spec": {
"containers": [
{
"name": "nginx",
"image": "nginx:1.7.9",
"ports": [
{
"containerPort": 80,
"protocol": "TCP"
}
],
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {}
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": 1,
"maxSurge": 1
}
}
},
"status": {}
}
[root@master ~]#
##3.26 kubectl explain(リソースの説明)
[root@master ~]# kubectl explain node
DESCRIPTION:
Node is a worker node in Kubernetes, formerly known as minion. Each node will have a unique identifier in the cache (i.e. in etcd).
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
http://releases.k8s.io/release-1.2/docs/devel/api-conventions.md#resources
-以下、略-
他にも以下のようなリソースの説明がある。リソース一覧を得たいなら、kubectl getを入力したあとに "TAB"キーを押下する。
[root@master ~]# kubectl explain pod
[root@master ~]# kubectl explain deployment
[root@master ~]# kubectl explain rc
#4 その他
##4.1 コンポーネントの状態を調べる
[root@master ~]# kubectl get componentstatus
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
etcdを停止する。
[root@master ~]# systemctl stop etcd
[root@master ~]# systemctl is-active etcd
inactive
コンポーネントの状態を確認する。etcdを停止すると、etcdの行自体表示されないようだ。
[root@master ~]# kubectl get componentstatus
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
次に、schedulerを停止する。
[root@master ~]# systemctl stop kube-scheduler.service
[root@master ~]# systemctl is-active kube-scheduler.service
inactive
コンポーネントの状態を確認する。schedulerの状態が「Unhealthy」と表示されるようになった。
[root@master ~]# kubectl get componentstatus
NAME STATUS MESSAGE ERROR
scheduler Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: getsockopt: connection refused
controller-manager Healthy ok
次に、controller-managerを停止する。
[root@master ~]# systemctl stop kube-controller-manager.service
[root@master ~]# systemctl is-active kube-controller-manager.service
inactive
コンポーネントの状態を確認する。controller-managerの状態が「Unhealthy」と表示されるようになった。
[root@master ~]# kubectl get componentstatus
NAME STATUS MESSAGE ERROR
controller-manager Unhealthy Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: getsockopt: connection refused
scheduler Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: getsockopt: connection refused
[root@master ~]#
etcd,scheduler,controller-managerを再度起動して、状態を確認する。
[root@master ~]# systemctl start etcd
[root@master ~]# systemctl start kube-controller-manager.service
[root@master ~]# systemctl start kube-scheduler.service
[root@master ~]# kubectl get componentstatus
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health": "true"}
##4.2 kubectlコマンドが利用しているAPIを調べる
オプションに--v=6,7,8を指定すると、kubectl実行時に利用しているAPIを調べることができる。6->7->8となるにつれて、より詳細な情報が得られる。
[root@master ~]# kubectl get pod --v=6
I1106 18:44:05.765128 10587 round_trippers.go:286] GET http://localhost:8080/api 200 OK in 3 milliseconds
I1106 18:44:05.769004 10587 round_trippers.go:286] GET http://localhost:8080/apis 200 OK in 1 milliseconds
I1106 18:44:05.775203 10587 round_trippers.go:286] GET http://localhost:8080/api/v1/namespaces/default/pods 200 OK in 3 milliseconds
NAME READY STATUS RESTARTS AGE
nginx-2040093540-jdy9o 1/1 Running 0 3m
--v=7を指定した場合
[root@master ~]# kubectl get pod --v=7
I1106 18:44:07.691145 10596 round_trippers.go:264] GET http://localhost:8080/api
I1106 18:44:07.691350 10596 round_trippers.go:271] Request Headers:
I1106 18:44:07.691380 10596 round_trippers.go:274] Accept: application/json, */*
I1106 18:44:07.691407 10596 round_trippers.go:274] User-Agent: kubectl/v1.2.0 (linux/amd64) kubernetes/ec7364b
I1106 18:44:07.696376 10596 round_trippers.go:289] Response Status: 200 OK in 4 milliseconds
I1106 18:44:07.697985 10596 round_trippers.go:264] GET http://localhost:8080/apis
I1106 18:44:07.698169 10596 round_trippers.go:271] Request Headers:
I1106 18:44:07.698224 10596 round_trippers.go:274] User-Agent: kubectl/v1.2.0 (linux/amd64) kubernetes/ec7364b
I1106 18:44:07.698280 10596 round_trippers.go:274] Accept: application/json, */*
I1106 18:44:07.700849 10596 round_trippers.go:289] Response Status: 200 OK in 2 milliseconds
I1106 18:44:07.703040 10596 round_trippers.go:264] GET http://localhost:8080/api/v1/namespaces/default/pods
I1106 18:44:07.703818 10596 round_trippers.go:271] Request Headers:
I1106 18:44:07.704378 10596 round_trippers.go:274] Accept: application/json, */*
I1106 18:44:07.705106 10596 round_trippers.go:274] User-Agent: kubectl/v1.2.0 (linux/amd64) kubernetes/ec7364b
I1106 18:44:07.709303 10596 round_trippers.go:289] Response Status: 200 OK in 3 milliseconds
NAME READY STATUS RESTARTS AGE
nginx-2040093540-jdy9o 1/1 Running 0 3m
[root@master ~]#
##4.3 サービスを作成するとき、target-portにどんな値を指定するのか?
イメージがExposedPortsとしてExposeしているポート番号を指定する。ためしに、httpd のサービスを作成するとき、target-portに100番を指定してみたところ、Podにアクセスできなかった。ExposedPortsの説明は https://docs.docker.com/docker-cloud/apps/ports/ を参照しました。
[root@master ~]# kubectl run httpd --image=httpd
deployment "httpd" created
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
httpd-2047761252-fmrmn 1/1 Running 0 12s
[root@master ~]# kubectl expose deployment httpd --port=8888 --target-port=100
service "httpd" exposed
サービスを確認する。
[root@master ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpd 10.254.40.137 <none> 8888/TCP 5s
エンドポイント情報を確認する。Pod側のポート番号が100番になった
[root@master ~]# kubectl get endpoints
NAME ENDPOINTS AGE
httpd 10.1.72.2:100 8s
[root@master ~]# curl http://10.254.40.137:8888
curl: (7) Failed connect to 10.254.40.137:8888; 接続を拒否されました
[root@master ~]# docker images |grep httpd
docker.io/httpd latest 9a0bc463edaa 2 weeks ago 193.3 MB
[root@master ~]# docker inspect httpd|grep -A2 ExposedPorts
"ExposedPorts": {
"80/tcp": {}
},
--
"ExposedPorts": {
"80/tcp": {}
},
##4.4 指定したホストでPodを起動する(nodeSelectorを使う)
ホストのラベルを確認する。
[root@master1 ~]# kubectl get node --show-labels
NAME STATUS AGE LABELS
master1 Ready 3h kubernetes.io/hostname=master1
master2 Ready 3h kubernetes.io/hostname=master2
Pod定義ファイルを作成する。
Podをmaster2で起動するので、nodeSelectorに"kubernetes.io/hostname: master2"を指定する。
[root@master1 ~]# vi centos.yaml
[root@master1 ~]# cat centos.yaml
apiVersion: v1
kind: Pod
metadata:
name: centos
labels:
app: web
spec:
containers:
- name: centos6
image: centos:centos6
command: ["sleep", "3600"]
- name: centos7
image: centos:centos7
command: ["sleep", "3600"]
nodeSelector:
kubernetes.io/hostname: master2
Podを起動する。
[root@master1 ~]# kubectl create -f centos.yaml
pod "centos" created
Podの状態を確認する。master2で動いていることがわかる。
[root@master1 ~]# kubectl get pod -o wide --show-labels
NAME READY STATUS RESTARTS AGE NODE LABELS
centos 2/2 Running 0 10s master2 app=web
ためしに、centos7でbashを実行してみる。centos7.3であることがわかる。
[root@master1 ~]# kubectl exec centos -c centos7 -it bash
[root@centos /]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@centos /]# exit
exit
ためしに、centos6でbashを実行してみる。centos6.8であることがわかる。
[root@master1 ~]# kubectl exec centos -c centos6 -it bash
[root@centos /]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@centos /]# exit
exit
Podを終了する。
[root@master1 ~]# kubectl delete pod centos
pod "centos" deleted
##4.5 kubeletのPod起動方法
Podを起動するには、kubectl runを実行する方法以外に、他に3つの方法がある(man kubeletより)
本章では、Pod定義ファイルの格納場所をkubeletの定義ファイルに定義する方法について説明する。
-----------------------------------------------
1. 参考情報
------------------------------------------------
kubeletのPod起動方法。man kubeletより抜粋。
(1) kube-apiserverからの指示(kubectl runで起動する方法)
(2) kubeletがpod定義ファイルを読み込んでPodを起動する方法(ここの説明)
(3) HTTP endpointによる方法
(4) HTTP serverによる方法
他の参考情報
http://kubernetes.io/docs/admin/static-pods/
-----------------------------------------------
2. 実施手順
------------------------------------------------
Podの定義ファイル(yaml)を格納するディレクトリを作成する。
[root@node1 ~]# mkdir -p /etc/kubernetes/manifests
テンプレート格納場所をkubeletの定義ファイルに指定する。
[root@node1 ~]# vi /etc/kubernetes/kubelet
KUBELET_ARGS="--config=/etc/kubernetes/manifests"
テスト用のPod(httpd)定義ファイルを作成する。
[root@node1 ~]# vi /etc/kubernetes/manifests/httpd.yaml
[root@node1 ~]# cat /etc/kubernetes/manifests/httpd.yaml
apiVersion: v1
kind: Pod
metadata:
name: httpd
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 8080
テスト用のPod(Nginx)定義ファイルを作成する。
[root@node1 ~]# vi /etc/kubernetes/manifests/nginx.yaml
[root@node1 ~]# cat /etc/kubernetes/manifests/nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
作成したPod定義ファイルを確認する。
[root@node1 ~]# ls /etc/kubernetes/manifests/
httpd.yaml nginx.yaml
kubeletを再起動する。
[root@node1 ~]# systemctl restart kubelet.service
kubeletの状態を確認する。
[root@node1 ~]# systemctl is-active kubelet.service
active
kubeletの起動オプションを確認する。1行が長いので折り返しています。
Pod定義ファイルの格納場所(★印)が有効になっていることがわかる。
[root@node1 ~]# ps aux |grep kubelet
root 6795 11.0 4.1 425032 41628 ? Ssl 09:42 0:54 /usr/bin/kubelet
--logtostderr=true
--v=0
--api-servers=http://master1:8080
--address=0.0.0.0
--allow-privileged=false
--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest
★--config=/etc/kubernetes/manifests
コンテナの状態を確認する。コンテナが2つ(Httpd,Nginx)起動していることがわかる。
[root@node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50577e1e4446 nginx "nginx -g 'daemon off" About a minute ago Up About a minute k8s_nginx.7270fc8f_nginx-node1_default_ca6112932ce36c625ac20a3916ea5bac_32042029
795272acc6ef httpd "httpd-foreground" About a minute ago Up About a minute k8s_httpd.ccebfcf7_httpd-node1_default_df10c6d7dec5867a7c313e234344ce45_ec8dd867
ba1b7228adb5 registry.access.redhat.com/rhel7/pod-infrastructure:latest "/pod" 2 minutes ago Up About a minute k8s_POD.c36b0a77_nginx-node1_default_ca6112932ce36c625ac20a3916ea5bac_fe690ed7
bc90da1e0bb3 registry.access.redhat.com/rhel7/pod-infrastructure:latest "/pod" 2 minutes ago Up About a minute k8s_POD.3e750adf_httpd-node1_default_df10c6d7dec5867a7c313e234344ce45_554c2cd3
[root@node1 ~]#
Pod定義ファイルを確認する。
[root@node1 manifests]# pwd
/etc/kubernetes/manifests
[root@node1 manifests]# ls
httpd.yaml nginx.yaml
kubeletがPod定義ファイルを読めないようにする。
[root@node1 manifests]# mv httpd.yaml ../
[root@node1 manifests]# mv nginx.yaml ../
[root@node1 manifests]# ls
[root@node1 manifests]#
コンテナの状態を確認する。Pod定義ファイルが読めなくなり、kubeletがコンテナを終了させたことがわかる。
[root@node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@node1 ~]#
httpdのPod定義ファイルだけ、kubeletが読めるようにする。
[root@node1 manifests]# cp ../httpd.yaml .
[root@node1 manifests]# ls
httpd.yaml
コンテナの状態を確認する。Httpdのコンテナだけ起動していることがわかる。
[root@node1 manifests]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0aac7802de2 httpd "httpd-foreground" 3 seconds ago Up Less than a second k8s_httpd.ccebfcf7_httpd-node1_default_df10c6d7dec5867a7c313e234344ce45_75d498d0
e0bae879cd72 registry.access.redhat.com/rhel7/pod-infrastructure:latest "/pod" 16 seconds ago Up 12 seconds k8s_POD.3e750adf_httpd-node1_default_df10c6d7dec5867a7c313e234344ce45_b22b86a6
[root@node1 manifests]#
##4.6 Pod,RC(ReplicationController),Deploymentのyamlファイル
busyboxのPodを起動する定義ファイルをPod,RC,Deploymentとして作成した。
---------------------------------------
1. Pod
---------------------------------------
Podの定義ファイル
[root@master1 test]# cat test.yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox-test
spec:
containers:
- name: busybox
image: busybox
command: ["sleep", "3600"]
[root@master1 test]# kubectl create -f test.yaml
pod "busybox-test" created
[root@master1 test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox-test 1/1 Running 0 46s
---------------------------------------
2. ReplicationController
---------------------------------------
[root@master1 test]# cat test2.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: busybox-test
spec:
replicas: 1
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: nginx
image: nginx
command: ["sleep", "3600"]
[root@master1 test]# kubectl create -f test2.yaml
replicationcontroller "busybox-test" created
[root@master1 test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox-test-vcpjd 1/1 Running 0 17s
[root@master1 test]# kubectl get rc
NAME DESIRED CURRENT AGE
busybox-test 1 1 20s
[root@master1 test]#
---------------------------------------
3. Deployment
---------------------------------------
[root@master1 test]# cat test3.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: busybox-test
spec:
replicas: 1
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ["sleep", "3600"]
[root@master1 test]#
[root@master1 test]# kubectl create -f test3.yaml
deployment "busybox-test" created
[root@master1 test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox-test-308240389-dgcor 1/1 Running 0 27s
[root@master1 test]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
busybox-test 1 1 1 1 34s
##4.7 リソース制御(ResourceQuota,limitrange)
-
ResourceQuota
起動するpod数をnamespace毎に最大100個まで、といった制限を設定するときに使う。
cpu,memoryも設定可能。また、使用中のリソース量を表示することができる。 -
limitrange
Containerが使用すリソース(cpu,memory)のデフォルト値、および上限値を設定する。
デフォルト値ではなく、任意の値を使いたい場合は、Container起動時、コマンドの
オプション(--requests=memory,--requests=cpu)に使用するリソース量を明に設定する。
ただし上限値を超えて設定することはできない。
apiserverの定義ファイル編集する。LimitRangerを有効にする。
[root@master ~]# vi /etc/kubernetes/apiserver
KUBE_ADMISSION_CONTROL="--admission-control=LimitRanger"
[root@master resource]# cat quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: quota
spec:
hard:
cpu: "10"
memory: 1Gi
pods: "2"
replicationcontrollers: "5"
resourcequotas: "1"
services: "5"
[root@master resource]# cat limits.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: limits
spec:
limits:
- max:
cpu: "2"
memory: 1Gi
min:
cpu: 200m
memory: 6Mi
type: Pod
- default:
cpu: 400m
memory: 200Mi
defaultRequest:
cpu: 300m
memory: 100Mi
max:
cpu: "2"
memory: 500Mi
min:
cpu: 100m
memory: 3Mi
type: Container
リソースクォータ(resourcequota)を作成する。
[root@master resource]# kubectl create -f quota.yaml
resourcequota "quota" created
リソースクォータの状態を確認する。
[root@master resource]# kubectl describe resourcequota quota
Name: quota
Namespace: default
Resource Used Hard
-------- ---- ----
cpu 0 10
memory 0 1Gi
pods 0 2
replicationcontrollers 0 5
resourcequotas 1 1
services 1 5
limitrangeを作成する。
[root@master resource]# kubectl create -f limits.yaml
limitrange "limits" created
limitrangeの状態を確認する。
[root@master resource]# kubectl describe limitrange limits
Name: limits
Namespace: default
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Pod memory 6Mi 1Gi - - -
Pod cpu 200m 2 - - -
Container cpu 100m 2 300m 400m -
Container memory 3Mi 500Mi 100Mi 200Mi -
[root@master resource]# cat test.yaml
apiVersion: v1
kind: Pod
metadata:
name: centos
spec:
containers:
- name: centos
image: centos
command: ["sleep", "36000"]
#5 参考情報
##5.1 kubernetes公式
Deployments
Secrets
Using ConfigMap
high-availability
k8s-setup
##5.2 その他
Getting Started with Kubernetes
Sharing secret data in Kubernetes
Kubernetes: 構成コンポーネント一覧
KubernetesのConfigMapを試してみる
Kubernetesクラスタ環境を構築してDashboardで見える化を試してみた
Kubernetes こと始め (2) - Service開発