4、ポッドコントローラー
- コントローラはポッドを制御するために使用されます
コントローラは主に次のように分けられます。
- ReplicationController(古いバージョンのReplicaSetと同等、現在は使用することをお勧めします
- デプロイメントとRCの代わりにReplicaSet)
- ReplicaSetレプリカセット、ポッドの拡張と縮小を制御
- 展開はポッドのアップグレードとロールバックを制御します
- StatefulSetsはステートフルポッドアプリケーションを展開します
- DaemonSetは、を使用するなど、すべてのクラスターノード(マスターを含む)で実行されます。
- filebeat、node_exporter
- 一度の仕事
- 定期的なCronjob
4.1デプロイメントとレプリカセット
4.1.1レプリカセットコントローラーの機能:
- 新しいセットベースのセレクターをサポートします(以前のrcにはそのような機能はありません)
- ポッドのコピー数を変更することで、ポッドの拡大と縮小を実現します
4.1.2デプロイメントコントローラーの機能:
- 展開は、オンライン展開、ローリングアップグレード、コピー作成、ロールバック、およびその他の機能を統合します
- ReplicaSetは、Deploymentに含まれ、使用されています
4.1.3デプロイメントを作成するコマンド
kubectl run nginx1 --image=nginx:1.15-alpine --port=80 --replicas=1
kubectl get deployment
kubectl get pod -o wide
ローカルにミラーがない場合は、自動的にダウンロードされます。nginx:1.15-alpineは比較的小さく
、ダウンロードが高速です。独自のイントラネットミラーリポジトリを指定して、ダウンロード速度を向上させることもできます。--port = 80は、dockerの公開ポートと同等です
--replicas = 1はレプリカの数を指定し、デフォルトも1です。
4.1.4YAMLファイル作成の展開
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx2 # deployment名
spec:
2, 应用YAML文件创建deployment
3, 查看验证
删除deployment
replicas: 1 # 副本集,deployment里使用了
replicaset
selector:
matchLabels:
app: nginx # 匹配的pod标签,表示deployment和
rs控制器控制带有此标签的pod
template: # 代表pod的配置模板
metadata:
labels:
app: nginx # pod的标签
spec:
containers: # 以下为pod里的容器定义
- name: nginx
image: nginx:1.15-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
kubectl apply -f nginx2-deployment.yml
kubectl get deployment
kubectl get pods
4.2DaemonSetコントローラー
- DaemonSetを使用すると、すべての(または特定の)ノードで同じポッドを実行できます
- K8Sへのクラスターノードの
場合、ノードがK8Sクラスターから削除されると、ポッドはノードラインで実行されるようにスケジュールされます。DaemonSetポッドは削除されます。 - DaemonSetを削除すると、このDaemonSetに関連付けられているすべてのポッドが削除され
ます。 - DaemonSetポッドが強制終了、停止、またはクラッシュした場合、
DaemonSetはこの計算ノードに新しいコピーを再作成します - DaemonSetは通常、ログ収集、監視収集、分散ストレージデーモンなどで使用されます。
vim nginx-daemonset.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemonset
spec:
selector:
matchLabels:
name: nginx-test
template:
metadata:
labels:
name: nginx-test
spec:
tolerations: # tolerations代表容忍
- key: node-role.kubernetes.io/master # 能容忍的污点key
effect: NoSchedule # kubectl explain pod.spec.tolerations查看(能容忍的污点effect)
containers:
- name: nginx
image: nginx:1.15-alpine
imagePullPolicy: IfNotPresent
resources: # resources资源限制是为了防止master节点的资源被占太多(根据实际情况配置)
limits:
memory: 100Mi
requests:
4.3ジョブコントローラー
- ジョブは、短期間の1回限りのタスク(短期間の1回限りのタスク)、つまり1回だけ実行されるタスクのバッチ処理を担当し、バッチ処理タスクの1つ以上のポッドが正常に完了するようにします。
4.3.1ワンタイムジョブを作成する
vim job.yml
apiVersion: batch/v1
kind: Job
metadata:
name: pi # job名
spec:
template:
metadata:
name: pi # pod名
spec:
containers:
- name: pi # 容器名
image: perl # 此镜像有800多M,可提前导入到所有节点,也可能指定导入到某一节点然后指定调度到此节点
imagePullPolicy: IfNotPresent
command: ["perl", "-Mbignum=bpi", "-wle", "printbpi(2000)"]
restartPolicy: Never # 执行完后不再重启
kubectl apply -f job.yml
kubectl get jobs
kubectl get pods
kubectl logs pi-tjq9b
4.3.2固定数のジョブを作成する
vim job2.yml
apiVersion: batch/v1
kind: Job
metadata:
name: busybox-job
spec:
completions: 10 # 执行job的次数
parallelism: 1 # 执行job的并发数
template:
metadata:
name: busybox-job-pod
spec:
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command: ["echo", "hello"]
restartPolicy: Never
kubectl apply -f job2.yml
kubectl get job
4.4crontabコントローラー
- Linuxシステムのcrontabと同様に、指定された期間に関連タスクを実行します
vim cronjob.yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob1
spec:
schedule: "* * * * *" # 分时日月周
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo hello kubernetes
imagePullPolicy: IfNotPresent
restartPolicy: OnFailure
kubectl apply -f cronjob.yml
kubectl get cronjob
kubectl get pod
4.5ポッドバージョンのアップグレード(ローリングアップデート)
# 升级前查看版本
kubectl describe pod nginx1-7d9b8757cf-czcz4 |grep Image: # 升级前版本
Image: nginx:1.15-alpine
kubectl exec nginx1-7d9b8757cf-czcz4 --nginx -v
# 正式升级
kubectl set image deployment nginx1 nginx1=nginx:1.16-alpine --record # 升级为1.16版
kubectl set image -h # 查看帮助
kubectl rollout status deployment nginx1 # 滚努更新
# 查看版本
kubectl get pods
kubectl describe pod nginx1-7ffc8cb4fb-tn4ls |grep Image:
kubectl exec nginx1-7ffc8cb4fb-tn4ls --nginx -v
デプロイメントnginx1は、nginx1という名前のデプロイメントを表します
nginx1 = nginx:1.16-alpine前のnginx1はコンテナー名です--recordは、
記録することを意味します
4.6ポッドバージョンのロールバック
kubectl rollout history deployment nginx1 # 查看版本历史信息
kubectl rollout history deployment nginx1--revision=1 # 定义要回退的版本为1
kubectl rollout undo deployment nginx1 --to-revision=1 # 开始回退
deployment.extensions/nginx1 rolled back
kubectl rollout history deployment nginx1 deployment.extensions/nginx1 # 查看有没回退
kubectl get pods
kubectl describe pod nginx1-7d9b8757cf-m7rt4 |grep Image:
kubectl exec nginx1-7d9b8757cf-m7rt4 --nginx -v
4.7レプリカの拡張
kubectl scale -h # 查看帮助
kubectl scale deployment nginx1 --replicas=10 # 扩容为10个副本,改小字则副本缩减
kubectl get pods -o wide