2020/11/16
今回できたこと
KadaKoda環境とmacOSローカル環境で、minikubeを使った、以下のチュートリアルを行った。
今後の作業予定
お約束
定例作業
チュートリアルKubernetesの基本を学ぶをKataKoda上で試す
今回は、チュートリアルに従って、KataKoda上のminikubeで実習を行った。
minikubeのバージョンを確認する。
code:shell
$ minikube version
minikube version: v1.8.1
commit: cbda04cf6bbe65e987ae52bb393c10099ab62014
minikubeの起動を行う。
code:shell
$ minikube start
* minikube v1.8.1 on Ubuntu 18.04
* Using the none driver based on user configuration
* Running on localhost (CPUs=2, Memory=2460MB, Disk=145651MB) ...
* OS release is Ubuntu 18.04.4 LTS
* Preparing Kubernetes v1.17.3 on Docker 19.03.6 ...
- kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
* Launching Kubernetes ...
* Enabling addons: default-storageclass, storage-provisioner
* Configuring local host environment ...
* Waiting for cluster to come online ...
* Done! kubectl is now configured to use "minikube"
K8sの操作には、kubectlを使う。
versionコマンドで、K8sのバージョンが得られる。
ここでは、サーバー(マスター)が1.17.3、クライアント(ノード)が1.17.3となっている。
code:shell
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:07:13Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
コマンドcluster-infoで、現在のクラスタの情報が得られる。
URL形式でマスターやサービスが与えられているが、このURLにアクセスする手段がないため、ここではURLにアクセスして試すことはできない。
code:shell
$ kubectl cluster-info
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
ノードの状況は、get nodesで得られる。
現在は、マスターノードのみが動いている。
code:shell
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 10m v1.17.3
ここで、kubernetes-bootcampをデプロイする。
code:shell
$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
deployment.apps/kubernetes-bootcamp created
実際にデプロイが有効になったことを確認する。
code:shell
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1/1 1 1 64s
ここで、外部からK8sクラスタにアクセスするためのproxyの操作を行う。
proxyを起動しない状態では、以下のようにproxyサーバが動いておらず、K8s内部へはアクセスできない。
code:shell
curl: (7) Failed to connect to localhost port 8001: Connection refused
proxyサーバを起動する。
code:shell
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
code:shell
{
"major": "1",
"minor": "17",
"gitVersion": "v1.17.3",
"gitCommit": "06ad960bfd03b39c8310aaf92d1e7c12ce618213",
"gitTreeState": "clean",
"buildDate": "2020-02-11T18:07:13Z",
"goVersion": "go1.13.6",
"compiler": "gc",
"platform": "linux/amd64"
}
動作しているPodsに関してはget podsで状態を確認することができる。
code:shell
kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-69fbc6f4cf-67dlc 1/1 Running 0 11m
より詳細な情報が欲しい場合は、describe podsが利用できる。
code:shell
$ kubectl describe pods
Name: kubernetes-bootcamp-765bf4c7b4-96hgd
Namespace: default
Priority: 0
Node: minikube/172.17.0.36
Start Time: Mon, 16 Nov 2020 02:35:47 +0000
Labels: pod-template-hash=765bf4c7b4
run=kubernetes-bootcamp
Annotations: <none>
Status: Running
IP: 172.18.0.2
IPs:
IP: 172.18.0.2
Controlled By: ReplicaSet/kubernetes-bootcamp-765bf4c7b4
Containers:
kubernetes-bootcamp:
Container ID: docker://fb2c4f8b75770a6f03e0ddff3ecf395edb50d8ced1a849a1443c5ada85d33e5b
Image: gcr.io/google-samples/kubernetes-bootcamp:v1
Image ID: docker-pullable://jocatalin/kubernetes-bootcamp@sha256:0d6b8ee63bb57c5f5b6156f446b3bc3b3c143d233037f3a2f00e279c8fcc64af
Port: 8080/TCP
Host Port: 0/TCP
State: Running
Started: Mon, 16 Nov 2020 02:35:49 +0000
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-666zl (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-666zl:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-666zl
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecutefor 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 53m (x2 over 53m) default-scheduler 0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.
Normal Scheduled 53m default-scheduler Successfully assigned default/kubernetes-bootcamp-765bf4c7b4-96hgd to minikube
Normal Pulled 53m kubelet, minikube Container image "gcr.io/google-samples/kubernetes-bootcamp:v1" already present on machine
Normal Created 53m kubelet, minikube Created container kubernetes-bootcamp
Normal Started 53m kubelet, minikube Started container kubernetes-bootcamp
他にも、describeコマンドでは、deploymentsやnodeに関する情報も取得できる。
code:shell
$ kubectl describe deployments
Name: kubernetes-bootcamp
Namespace: default
CreationTimestamp: Mon, 16 Nov 2020 03:51:22 +0000
Labels: run=kubernetes-bootcamp
Annotations: deployment.kubernetes.io/revision: 1
Selector: run=kubernetes-bootcamp
Replicas: 1 desired | 1 updated | 1 total |1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: run=kubernetes-bootcamp
Containers:
kubernetes-bootcamp:
Image: gcr.io/google-samples/kubernetes-bootcamp:v1
Port: 8080/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: kubernetes-bootcamp-765bf4c7b4 (1/1 replicas created)
Events:
Type Reason Age FromMessage
---- ------ ---- -----------
Normal ScalingReplicaSet 53s deployment-controllerScaled up replica set kubernetes-bootcamp-765bf4c7b4 to 1
code:shell
$ kubectl describe node
Name: minikube
Roles: master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=minikube
kubernetes.io/os=linux
minikube.k8s.io/commit=cbda04cf6bbe65e987ae52bb393c10099ab62014
minikube.k8s.io/name=minikube
minikube.k8s.io/updated_at=2020_11_16T03_51_23_0700
minikube.k8s.io/version=v1.8.1
node-role.kubernetes.io/master=
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Mon, 16 Nov 2020 03:51:20 +0000
Taints: <none>
Unschedulable: false
Lease:
HolderIdentity: minikube
AcquireTime: <unset>
RenewTime: Mon, 16 Nov 2020 03:53:56 +0000
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
MemoryPressure False Mon, 16 Nov 2020 03:51:37 +0000 Mon, 16 Nov 2020 03:51:14 +0000 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Mon, 16 Nov 2020 03:51:37 +0000 Mon, 16 Nov 2020 03:51:14 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Mon, 16 Nov 2020 03:51:37 +0000 Mon, 16 Nov 2020 03:51:14 +0000 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Mon, 16 Nov 2020 03:51:37 +0000 Mon, 16 Nov 2020 03:51:37 +0000 KubeletReady kubelet is posting ready status. AppArmor enabled
Addresses:
InternalIP: 172.17.0.30
Hostname: minikube
Capacity:
cpu: 2
ephemeral-storage: 149147368Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 2519952Ki
pods: 110
Allocatable:
cpu: 2
ephemeral-storage: 137454214122
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 2417552Ki
pods: 110
System Info:
Machine ID:
System UUID:
Boot ID: 6e074cb3-e9c7-48ce-a53b-3786145fab8e
Kernel Version: 4.15.0-88-generic
OS Image: Ubuntu 18.04.4 LTS
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://19.3.6
Kubelet Version: v1.17.3
Kube-Proxy Version: v1.17.3
Non-terminated Pods: (11 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
default kubernetes-bootcamp-765bf4c7b4-ltwbs 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2m34s
kube-system coredns-6955765f44-ngk7q 100m (5%) 0 (0%) 70Mi (2%) 170Mi (7%) 2m34s
kube-system coredns-6955765f44-vmq7r 100m (5%) 0 (0%) 70Mi (2%) 170Mi (7%) 2m34s
kube-system etcd-minikube 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2m36s
kube-system kube-apiserver-minikube 250m (12%) 0 (0%) 0 (0%) 0 (0%) 2m36s
kube-system kube-controller-manager-minikube 200m (10%) 0 (0%) 0 (0%) 0 (0%) 2m36s
kube-system kube-proxy-bjmr5 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2m34s
kube-system kube-scheduler-minikube 100m (5%) 0 (0%) 0 (0%) 0 (0%) 2m36s
kube-system storage-provisioner 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2m39s
kubernetes-dashboard dashboard-metrics-scraper-7b64584c5c-7czvw 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2m34s
kubernetes-dashboard kubernetes-dashboard-79d9cd965-lvvql 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2m34s
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 750m (37%) 0 (0%)
memory 140Mi (5%) 340Mi (14%)
ephemeral-storage 0 (0%) 0 (0%)
Events:
Type Reason AgeFrom Message
---- ------ -------- -------
Normal NodeHasNoDiskPressure 2m50s (x4 over 2m50s)kubelet, minikube Node minikube status is now: NodeHasNoDiskPressure
Normal NodeHasSufficientPID 2m50s (x4 over 2m50s)kubelet, minikube Node minikube status is now: NodeHasSufficientPID
Normal NodeHasSufficientMemory 2m49s (x5 over 2m50s)kubelet, minikube Node minikube status is now: NodeHasSufficientMemory
Normal Starting 2m37skubelet, minikube Starting kubelet.
Normal NodeHasSufficientMemory 2m37skubelet, minikube Node minikube status is now: NodeHasSufficientMemory
Normal NodeHasNoDiskPressure 2m37skubelet, minikube Node minikube status is now: NodeHasNoDiskPressure
Normal NodeHasSufficientPID 2m37skubelet, minikube Node minikube status is now: NodeHasSufficientPID
Normal NodeAllocatableEnforced 2m36skubelet, minikube Updated Node Allocatable limit across pods
Normal Starting 2m32skube-proxy, minikube Starting kube-proxy.
Normal NodeReady 2m26skubelet, minikube Node minikube status is now: NodeReady
再度、Pod名を確認し、proxyを動かし、サービスが提供されていることを確認する。
code:shell
# Pod名の確認
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-765bf4c7b4-ltwbs 1/1 Running 0 8m16s
# proxyの起動
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
# サービスへの接続
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-765bf4c7b4-ltwbs | v=1
何度かcurlでサービスに接続した後で、logsコマンドでログを確認すると、以下のようになった。
code:shell
$ kubectl logs
kubernetes-bootcamp-765bf4c7b4-ltwbsKubernetes Bootcamp App Started At: 2020-11-16T03:51:40.394Z | Running On: kubernetes-bootcamp-765bf4c7b4-ltwbs
Running On: kubernetes-bootcamp-765bf4c7b4-ltwbs | Total Requests: 1 | App Uptime: 446.491 seconds | Log Time: 2020-11-16T03:59:06.885Z
Running On: kubernetes-bootcamp-765bf4c7b4-ltwbs | Total Requests: 2 | App Uptime: 619.227 seconds | Log Time: 2020-11-16T04:01:59.621Z
Running On: kubernetes-bootcamp-765bf4c7b4-ltwbs | Total Requests: 3 | App Uptime: 842.427 seconds | Log Time: 2020-11-16T04:05:42.821Z
Running On: kubernetes-bootcamp-765bf4c7b4-ltwbs | Total Requests: 4 | App Uptime: 843.574 seconds | Log Time: 2020-11-16T04:05:43.968Z
Running On: kubernetes-bootcamp-765bf4c7b4-ltwbs | Total Requests: 5 | App Uptime: 844.929 seconds | Log Time: 2020-11-16T04:05:45.323Z
Running On: kubernetes-bootcamp-765bf4c7b4-ltwbs | Total Requests: 6 | App Uptime: 846.086 seconds | Log Time: 2020-11-16T04:05:46.480Z
execコマンドを使うと、K8s環境で任意のコマンドを実行することができる。
以下は、環境変数を確認している例である。
code:shell
$ kubectl exec kubernetes-bootcamp-765bf4c7b4-ltwbs env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=kubernetes-bootcamp-765bf4c7b4-ltwbs
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
NPM_CONFIG_LOGLEVEL=info
NODE_VERSION=6.3.1
HOME=/root
一般的には、/bin/bashのシェルを動かし、内部で作業を行うために利用される。
-tiオプションは、対話的(-i)に利用し、ttyを使う(-t)ため、シェルで利用する時にはよく指定されるオプションである。
このデモの場合、Node.jsが動いていることがわかる。
code:shell
$ kubectl exec -ti kubernetes-bootcamp-765bf4c7b4-ltwbs /bin/bash
root@kubernetes-bootcamp-765bf4c7b4-ltwbs:/# ps agxuw
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4336 640 ? Ss 04:12 0:00 /bin/sh -c node server.js
root 7 0.1 0.9 708220 24096 ? Sl 04:12 0:00 node server.js
root 13 0.0 0.1 20244 3144 pts/0 Ss 04:13 0:00 bash
root 22 0.0 0.0 17500 2012 pts/0 R+ 04:14 0:00 ps agxuw
Node.jsで記述されたサーバのソースコードは、以下の通り。
概略は、以下の通り。
TCP/IP 8080で待ち受け。
HTTPリクエストに対して、以下を返す。
code:test.html
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Mon, 16 Nov 2020 04:30:24 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Hello Kubernetes bootcamp! | Running on: 'ホスト名' | v=1
ログに、以下を記録する。
サーバ起動時に、startTime(開始時間)とhost(ホスト名)を記録する。
アクセス毎に、以下の情報を記録する。
host(ホスト名)
requests(リクエスト回数-1)
(new Date() - startTime)/1000(サーバの起動時間からの経過秒数)
Date()(ログに記録された時間)
code:shell
root@kubernetes-bootcamp-765bf4c7b4-ltwbs:/# cat server.js
var http = require('http');
var requests=0;
var podname= process.env.HOSTNAME;
var startTime;
var host;
var handleRequest = function(request, response) {
response.setHeader('Content-Type', 'text/plain');
response.writeHead(200);
response.write("Hello Kubernetes bootcamp! | Running on: ");
response.write(host);
response.end(" | v=1\n");
console.log("Running On:" ,host, "| Total Requests:", ++requests,"| App Uptime:", (new Date() - startTime)/1000 ,"seconds", "| Log Time:",new Date());
}
var www = http.createServer(handleRequest);
www.listen(8080,function () {
startTime = new Date();;
host = process.env.HOSTNAME;
console.log ("Kubernetes Bootcamp App Started At:",startTime, "| Running On: " ,host, "\n" );
});
返されるヘッダ情報は、以下のように確認した。
code:shell
# curl --dump-header headers.txt localhost:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-765bf4c7b4-8s8bx | v=1
# cat headers.txt
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Mon, 16 Nov 2020 04:30:24 GMT
Connection: keep-alive
Transfer-Encoding: chunked
チュートリアルKubernetesの基本を学ぶをmacOS版minikubeで試す
以下、チュートリアルと同じ実習をmacOSローカルのminikube環境で試した。
ここでは、KadaKondaと同じ内容に関しては、特に説明しない。
code:shell
% minikube start
* Darwin 10.13.6 上の minikube v1.14.2
* プロフィールを元に、 virtualbox ドライバを使用します
* コントロールプレーンのノード minikube を minikube 上で起動しています
* 既存の virtualbox VM を "minikube" のために再起動しています...
* Docker 19.03.12 で Kubernetes v1.19.2 を準備しています...
* Kubernetes コンポーネントを検証しています...
* 有効なアドオン: default-storageclass, storage-provisioner, dashboard
* Done! kubectl is now configured to use "minikube" by default
code:shell
% minikube dashboard
* ダッシュボードの状態を確認しています...
* プロキシを起動しています...
* プロキシの状態を確認しています...
code:shell
% kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T18:43:01Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.2", GitCommit:"f5743093fd1c663cb0cbc89748f730662345d44d", GitTreeState:"clean", BuildDate:"2020-09-16T13:32:58Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
code:shell
% kubectl cluster-info
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
code:shell
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
"reason": "Forbidden",
"details": {
},
"code": 403
}
code:shell
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "services \"kube-dns:dns\" is forbidden: User \"system:anonymous\" cannot get resource \"services/proxy\" in API group \"\" in the namespace \"kube-system\"",
"reason": "Forbidden",
"details": {
"name": "kube-dns:dns",
"kind": "services"
},
"code": 403
}
code:shell
% kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 16d v1.19.2
これまで行ったhello-minikubeの実習で、既にPodが3つ動いているため、デプロイの状態は以下のようになる。
code:shell
% kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-minikube 3/3 3 3 16d
同様に、get podsは以下のように3つのPod情報を返す。
code:shell
% kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-minikube-5d9b964bfb-fzgbt 1/1 Running 3 16d
hello-minikube-5d9b964bfb-w8r7t 1/1 Running 3 16d
hello-minikube-5d9b964bfb-z4pwh 1/1 Running 3 16d
同じように、describe podsも3つ分の情報を返す。
Pod1の情報は、以下の通り。
code:shell
# Pod1の情報
Name: hello-minikube-5d9b964bfb-fzgbt
Namespace: default
Priority: 0
Node: minikube/192.168.99.100
Start Time: Fri, 30 Oct 2020 14:02:06 +0900
Labels: app=hello-minikube
pod-template-hash=5d9b964bfb
Annotations: <none>
Status: Running
IP: 172.17.0.5
IPs:
IP: 172.17.0.5
Controlled By: ReplicaSet/hello-minikube-5d9b964bfb
Containers:
echoserver:
Container ID: docker://924cfb0b2b961650dd5794038bdae109e331ba3dff8dfc84743dcbd55fd3d6ef
Image: k8s.gcr.io/echoserver:1.10
Image ID: docker-pullable://k8s.gcr.io/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
Port: <none>
Host Port: <none>
State: Running
Started: Mon, 16 Nov 2020 10:43:28 +0900
Last State: Terminated
Reason: Error
Exit Code: 255
Started: Fri, 13 Nov 2020 10:11:02 +0900
Finished: Mon, 16 Nov 2020 10:42:23 +0900
Ready: True
Restart Count: 3
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-nzkc5 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-nzkc5:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-nzkc5
Optional: false
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: <none>
Pod2の情報は、Pod1との変更点がよくわかるように、Pod1との差分で表す。
変更された情報は、以下の通り。
Name: Podの名称
Start Time: 起動時間
IP: podのIP
Container ID: コンテナのUID
code:pods.txt.diff
% diff -u pod1.txt pod2.txt
--- pod1.txt 2020-11-16 12:34:35.000000000 +0900
+++ pod2.txt 2020-11-16 12:35:24.000000000 +0900
@@ -1,19 +1,19 @@
-Name: hello-minikube-5d9b964bfb-fzgbt
+Name: hello-minikube-5d9b964bfb-w8r7t
Namespace: default
Priority: 0
Node: minikube/192.168.99.100
-Start Time: Fri, 30 Oct 2020 14:02:06 +0900
+Start Time: Fri, 30 Oct 2020 14:24:31 +0900
Labels: app=hello-minikube
pod-template-hash=5d9b964bfb
Annotations: <none>
Status: Running
-IP: 172.17.0.5
+IP: 172.17.0.6
IPs:
- IP: 172.17.0.5
+ IP: 172.17.0.6
Controlled By: ReplicaSet/hello-minikube-5d9b964bfb
Containers:
echoserver:
- Container ID: docker://924cfb0b2b961650dd5794038bdae109e331ba3dff8dfc84743dcbd55fd3d6ef
+ Container ID: docker://6e28afef2c393c86563521d0ff62711b7e91dcfd47d7ee6e4acd59eae2a24db2
Image: k8s.gcr.io/echoserver:1.10
Image ID: docker-pullable://k8s.gcr.io/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
Port: <none>
describeコマンドでは、他にもdeploymentやnodeに関する詳細情報を得ることもできる。
code:shell
% kubectl describe deployments
Name: hello-minikube
Namespace: default
CreationTimestamp: Fri, 30 Oct 2020 14:02:06 +0900
Labels: app=hello-minikube
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=hello-minikube
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=hello-minikube
Containers:
echoserver:
Image: k8s.gcr.io/echoserver:1.10
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Progressing True NewReplicaSetAvailable
Available True MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet: hello-minikube-5d9b964bfb (3/3 replicas created)
Events: <none>
code:shell
% kubectl describe node
Name: minikube
Roles: master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=minikube
kubernetes.io/os=linux
minikube.k8s.io/commit=2c82918e2347188e21c4e44c8056fc80408bce10
minikube.k8s.io/name=minikube
minikube.k8s.io/updated_at=2020_10_30T12_52_06_0700
minikube.k8s.io/version=v1.14.2
node-role.kubernetes.io/master=
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Fri, 30 Oct 2020 12:52:02 +0900
Taints: <none>
Unschedulable: false
Lease:
HolderIdentity: minikube
AcquireTime: <unset>
RenewTime: Mon, 16 Nov 2020 12:49:06 +0900
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
MemoryPressure False Mon, 16 Nov 2020 12:44:14 +0900 Thu, 12 Nov 2020 21:05:36 +0900 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Mon, 16 Nov 2020 12:44:14 +0900 Thu, 12 Nov 2020 21:05:36 +0900 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Mon, 16 Nov 2020 12:44:14 +0900 Thu, 12 Nov 2020 21:05:36 +0900 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Mon, 16 Nov 2020 12:44:14 +0900 Thu, 12 Nov 2020 21:05:36 +0900 KubeletReady kubelet is posting ready status
Addresses:
InternalIP: 192.168.99.100
Hostname: minikube
Capacity:
cpu: 2
ephemeral-storage: 17784752Ki
hugepages-2Mi: 0
memory: 3934732Ki
pods: 110
Allocatable:
cpu: 2
ephemeral-storage: 17784752Ki
hugepages-2Mi: 0
memory: 3934732Ki
pods: 110
System Info:
Machine ID: 6389909462d44ba29e93152c37e363af
System UUID: f2cc7abf-c29c-dc4e-a317-3f4d6fdd107c
Boot ID: 562df586-9137-48d9-bd43-e51a4e8a62c4
Kernel Version: 4.19.114
OS Image: Buildroot 2020.02.6
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://19.3.12
Kubelet Version: v1.19.2
Kube-Proxy Version: v1.19.2
Non-terminated Pods: (12 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
default hello-minikube-5d9b964bfb-fzgbt 0 (0%) 0 (0%) 0 (0%) 0 (0%) 16d
default hello-minikube-5d9b964bfb-w8r7t 0 (0%) 0 (0%) 0 (0%) 0 (0%) 16d
default hello-minikube-5d9b964bfb-z4pwh 0 (0%) 0 (0%) 0 (0%) 0 (0%) 16d
kube-system coredns-f9fd979d6-j9dvf 100m (5%) 0 (0%) 70Mi (1%) 170Mi (4%) 16d
kube-system etcd-minikube 0 (0%) 0 (0%) 0 (0%) 0 (0%) 16d
kube-system kube-apiserver-minikube 250m (12%) 0 (0%) 0 (0%) 0 (0%) 16d
kube-system kube-controller-manager-minikube 200m (10%) 0 (0%) 0 (0%) 0 (0%) 16d
kube-system kube-proxy-72tgx 0 (0%) 0 (0%) 0 (0%) 0 (0%) 16d
kube-system kube-scheduler-minikube 100m (5%) 0 (0%) 0 (0%) 0 (0%) 16d
kube-system storage-provisioner 0 (0%) 0 (0%) 0 (0%) 0 (0%) 16d
kubernetes-dashboard dashboard-metrics-scraper-c95fcf479-v6rlq 0 (0%) 0 (0%) 0 (0%) 0 (0%) 16d
kubernetes-dashboard kubernetes-dashboard-584f46694c-2jjrm 0 (0%) 0 (0%) 0 (0%) 0 (0%) 16d
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 650m (32%) 0 (0%)
memory 70Mi (1%) 170Mi (4%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
Events: <none>
もう一度Podの名前を確認し、ログを表示するとnginxWebサーバが起動していることがわかる。
code:shell
% kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-minikube-5d9b964bfb-fzgbt 1/1 Running 3 16d
hello-minikube-5d9b964bfb-w8r7t 1/1 Running 3 16d
hello-minikube-5d9b964bfb-z4pwh 1/1 Running 3 16d
% kubectl logs hello-minikube-5d9b964bfb-fzgbt
Generating self-signed cert
Generating a 2048 bit RSA private key
...........................+++
......+++
writing new private key to '/certs/privateKey.key'
-----
Starting nginx
以下の手順で、何度かK8sクラスタにアクセスし、ログの変化を確認する。
code:shell
% minikube service hello-minikube --url
Hostname: hello-minikube-5d9b964bfb-w8r7t
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
Request Information:
client_address=172.17.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
Request Headers:
accept=*/*
host=192.168.99.100:31081
user-agent=curl/7.64.1
Request Body:
-no body in request-
% kubectl logs hello-minikube-5d9b964bfb-fzgbt
Generating self-signed cert
Generating a 2048 bit RSA private key
...........................+++
......+++
writing new private key to '/certs/privateKey.key'
-----
Starting nginx
最後に、minicube環境を停止しておく。
code:shell
% minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
% minikube stop
* ノード "minikube" を停止しています...
* 1台のノードが停止しました。
% minikube status
minikube
type: Control Plane
host: Stopped
kubelet: Stopped
apiserver: Stopped
kubeconfig: Stopped