Kubernetes入门指南 for beginners (learning from the book: Practical Introduction to Kubernetes) – Stable Edition Part 2.
背景 – 只需要一个选项:
我个人认为,除了对基础设施的了解,我还想创建和部署可以运行应用程序的环境,并且想要学习未来的相关知识。我还希望更进一步更新自己的知识。
在那些事情中,我遇見了這本書,並且希望從現在開始留下一些已經完成的事情,作為寫給未來自己的信件,希望能夠反省並重新審視。
本次分享的是关于引用和参考的书籍推荐,供大家作为学习使用。

关于实际学习
我想一边阅读书籍,一章一章地逐渐学习。我还想边使用GitHub的源代码边学习。这一章的学习可能真的会主要以书籍的抄写为主…
勉強著手
代码库
请给出此链接中的内容的中文释义:https://github.com/kubernetes-practical-guide/examples/tree/master/ch6.2.2/manifests/mattermost。
根据负载要求提高应用程序的处理能力。
扩大规模
资源请求
-
- コンテナに最低限割り当てたいリソース量を指定できる
-
- 指定しない場合はコンテナに割り当てるリソース量が0でも構わない
-
- リソース量以上の空き容量があるノードにスケジュールする
-
- すべてのノードに空き容量がなければスケジュールされず空きができるまで待機する
- メモリについては不足の場合はコンテナを終了されてしまう可能性がある
资源限制
-
- コンテナが利用できる上限のリソース量を指定できる
-
- 指定しない場合は無制限利用しても良いという意味で動いてしまう
-
- CPU は指定した値以上は利用できない
-
- Request で指定した Pod Noリソースのほうが余剰 CPU リソースより優先される
- メモリについては指定した値以上のメモリ量を利用した場合、コンテがが終了されてしまう可能性がある
设定要利用的资源量
command:
- sleep
- 5s
+ resources:
+ requests:
+ cpu: 100m # コア数を指定
+ memory: 100Mi # メモリ容量のバイト数を指定
volumes:
- name: cm-volume
configMap:
$ kubectl apply -f mattermost-deploy.yaml
扩展规模
尝试扩展 Mattermost 的 Pod
# 実行前
$ kubectl get pod -l app=mattermost
NAME READY STATUS RESTARTS AGE
mattermost-67d4ff7dd-xn72k 1/1 Running 4 3h17m
# 実行後
$ kubectl scale deployment mattermost --replicas=3
$ kubectl get pod -l app=mattermost
NAME READY STATUS RESTARTS AGE
mattermost-67d4ff7dd-44czk 1/1 Running 0 5s
mattermost-67d4ff7dd-4k56r 1/1 Running 0 5s
mattermost-67d4ff7dd-xn72k 1/1 Running 4 3h18m
自动进行扩展
-
- 手動で行うには kubectl scale で実行できるが、自動で行うには Kubernetes には HorizontalPodAutoscaler が用意されている
- HorizontalPodAutoscaler は Deployment や ReplicaSet の Pod を自動的にスケールアウトする
$ kubectl run cpu-max --image=k8spracticalguide/busybox:1.28 --requests=cpu=50m --limits=cpu=100m -- dd if=/dev/zero of=/dev/null
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/cpu-max created
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
cpu-max-8545d4cb98-7jw86 98m 0Mi
mattermost-67d4ff7dd-44czk 0m 26Mi
mattermost-67d4ff7dd-4k56r 1m 26Mi
mattermost-67d4ff7dd-xn72k 0m 45Mi
mysql-0 1m 219Mi
mysql-1 2m 197Mi
尝试使用HorizontalPodAutoscaler对象进行配置,以实现cpu-max的Pod的自动扩缩。
$ kubectl autoscale deployment cpu-max --cpu-percent=70 --min=1 --max=10
horizontalpodautoscaler.autoscaling/cpu-max autoscaled
$ kubectl get horizontalpodautoscalers.autoscaling
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
cpu-max Deployment/cpu-max 196%/70% 1 10 3 42s
$ kubectl describe hpa cpu-max
Name: cpu-max
Namespace: default
Labels: <none>
Annotations: <none>
CreationTimestamp: Wed, 06 May 2020 19:40:13 +0900
Reference: Deployment/cpu-max
Metrics: ( current / target )
resource cpu on pods (as a percentage of request): 199% (99m) / 70%
Min replicas: 1
Max replicas: 10
Deployment pods: 10 current / 10 desired
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale recommended size matches current size
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
ScalingLimited True TooManyReplicas the desired replica count is more than the maximum replica count
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulRescale 4m11s horizontal-pod-autoscaler New size: 3; reason: cpu resource utilization (percentage of request) above target
Normal SuccessfulRescale 2m25s horizontal-pod-autoscaler New size: 6; reason: cpu resource utilization (percentage of request) above target
Normal SuccessfulRescale 2m10s horizontal-pod-autoscaler New size: 9; reason: cpu resource utilization (percentage of request) above target
Normal SuccessfulRescale 23s horizontal-pod-autoscaler New size: 10; reason: cpu resource utilization (percentage of request) above target
$ kubectl delete deployments.apps cpu-max
deployment.apps "cpu-max" deleted
kubectl get po
NAME READY STATUS RESTARTS AGE
cpu-max-8545d4cb98-52blp 1/1 Terminating 0 3m23s
cpu-max-8545d4cb98-69vjx 1/1 Terminating 0 96s
cpu-max-8545d4cb98-6xh4c 1/1 Terminating 0 3m38s
cpu-max-8545d4cb98-6zvks 1/1 Terminating 0 3m38s
cpu-max-8545d4cb98-7jw86 1/1 Terminating 0 12m
cpu-max-8545d4cb98-84pjj 1/1 Terminating 0 5m24s
cpu-max-8545d4cb98-d8lqh 1/1 Terminating 0 3m23s
cpu-max-8545d4cb98-mvln8 1/1 Terminating 0 3m23s
cpu-max-8545d4cb98-wxwkn 1/1 Terminating 0 3m38s
cpu-max-8545d4cb98-xqzw9 1/1 Terminating 0 5m24s
mattermost-67d4ff7dd-44czk 1/1 Running 0 23m
mattermost-67d4ff7dd-4k56r 1/1 Running 0 23m
mattermost-67d4ff7dd-xn72k 1/1 Running 4 3h42m
mysql-0 1/1 Running 2 3h34m
mysql-1 1/1 Running 2 3h34m
# HorizontalPodAutoscaler オブジェクト削除
$ kubectl delete hpa cpu-max
horizontalpodautoscaler.autoscaling "cpu-max" deleted
# しばらくすると Pod が消えていることを確認
$ kubectl get po
NAME READY STATUS RESTARTS AGE
mattermost-67d4ff7dd-44czk 1/1 Running 0 27m
mattermost-67d4ff7dd-4k56r 1/1 Running 0 27m
mattermost-67d4ff7dd-xn72k 1/1 Running 4 3h46m
mysql-0 1/1 Running 2 3h38m
mysql-1 1/1 Running 2 3h38m
$ cat mattermost-hpa.yaml
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: mattermost-hpa
namespace: default
spec:
scaleTargetRef: # スケール対象のオブジェクトを指定
apiVersion: apps/v1
kind: Deployment
name: mattermost
minReplicas: 1 # レプリカの最小数
maxReplicas: 5 # レプリカの最大数
metrics: # オートスケールする問の指標
- type: Resource
resource:
name: memory
targetAverageUtilization: 50
$ kubectl apply -f mattermost-hpa.yaml
horizontalpodautoscaler.autoscaling/mattermost-hpa created
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
mattermost-67d4ff7dd-44czk 0m 26Mi
mattermost-67d4ff7dd-4k56r 0m 26Mi
mattermost-67d4ff7dd-xn72k 0m 45Mi
mysql-0 2m 219Mi
mysql-1 1m 197Mi
$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
mattermost-hpa Deployment/mattermost <unknown>/50% 1 5 5 10m
Pod 数目没有减少,但经确认有增加。暂时将其增加到了10个,然后发现有减少的迹象,这是环境问题吗?虽然不确定,但自动伸缩还是可以感知到的。
目标中的 “/50%” 这个 unknown 是正常的吗????
下一步我们将进行第七章的学习。
“加强应用程序的安全性”
最后
这次学到了扩展规模、分散扩展和自动扩展。这次确认了自动扩展的运作方式,真是大开眼界。虽然在Kubernetes中不是这样操作的,但有时也会被告知可以进行分散扩展!虽然理论和逻辑上我知道,但能看到实际运转真是太好了。
我认为确实有一个”刚好合适”的东西。
这里的投稿
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,Pod部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,NameSpace部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,Label部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,ReplicaSet部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,Deployment部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,Service部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,ConfigMap部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,Secret部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,操作部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,体验部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,体验部分2
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,体验部分3(Label操作)
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,体验部分3(OwnerReference操作)
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,清单文件部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,清单文件(ConfigMap)部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,通信部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,通信部分2
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,通信部分3
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,通信部分4
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,公开部分1(NodePort)
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,公开部分2(LoadBalancer)
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,公开部分3(Ingress)
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,外部存储部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,外部存储部分2
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,StatefulSet部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,StatefulSet部分2
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,StatefulSet部分3
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,扩展部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,Mattermost连接部分
-
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,Job部分
- 使用《Kubernetes实践入门》书籍开始学习的初学者入门介绍,稳定性部分