1.コントローラー
1.
ポッド分類:自律ポッド:終了後にポッドは作成されません。
コントローラーによって管理されるポッド:コントローラーのライフサイクルでは、ポッドのコピー数を常に維持する必要があり
ます。2。コントローラータイプ:
レプリケーションコントローラーおよびReplicaSet
Deployment
DaemonSet
StatefulSet
Job
CronJobHPA
はHorizontalPodAutoscalerの略です。
(1)ReplicationControllerとReplicaSetReplicaSet
は次世代のReplicationControllerであり、公式の推奨事項はReplicaSetを使用することです。
ReplicaSetとReplicationControllerの唯一の違いは、セレクターのサポートです。ReplicaSetは、新しいセットベースのセレクター要件をサポートします。
ReplicaSetは、指定された数のポッドレプリカが常に実行されていることを確認します。
ReplicaSetは個別に使用できますが、現在は主に、ポッドの作成、削除、更新を調整するメカニズムとしてデプロイメントで使用されています。
(2)デプロイメント
デプロイメントは、ポッドとレプリカセットの宣言型定義メソッドを提供します。
典型的なアプリケーションシナリオ:
1。ポッドとReplicaSetの作成に使用
2.ローリング更新とロールバック
3.拡張と縮小
4.一時停止と再開
kubectl apply -f rs.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: myapp:v2
kubectl get pod --show-labels
kubectl label pod deployment-6d4f5bf58f-mbswv app=myapp --overwrite
# 根据标签控制,始终要满足三个副本

(3)DaemonSet 1.
DaemonSetは、すべて(または一部)のノードがポッドのコピーを実行することを保証します。ノードがクラスターに参加すると、ポッドも追加されます。ノードがクラスターから削除されると、これらのポッドもリサイクルされます。DaemonSetを削除すると、DaemonSetによって作成されたすべてのポッドが削除されます。
2. DaemonSetの一般的な使用法:
glusterd、cephなどの各ノードでクラスターストレージDaemonSetを実行します。
fluentd、logstashなどの各ノードでログコレクションDaemonSetを実行します。
Prometheus Node Exporter、zabbixエージェントなどの各ノードで監視デーモンセットを実行します。3
。簡単な使用法は、各タイプのデーモンとして使用されるすべてのノードでデーモンセットを開始することです。
4.もう少し複雑な使用法は、デーモンのタイプごとに複数のデーモンセットを個別に使用することですが、符号が異なり、ハードウェアタイプごとにメモリとCPUの要件が異なります。
vim daemonset.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-example
labels:
k8s-app: zabbix-agent
spec:
selector:
matchLabels:
name: zabbix-agent
template:
metadata:
labels:
name: zabbix-agent
spec:
containers:
- name: zabbix-agent
image: zabbix-agent
kubectl apply -f daemonset.yml
kubectl get pod -o wide
kubectl get pod --show-labels
kubectl get daemonsets.apps #控制器查看
kubectl describe daemonsets.apps


(4)仕事を
バッチ処理タスクを実行し、タスクの一つ以上のポッドが正常に完了していることを確認するために一度だけタスクを実行
# 拉取测试镜像,上传到本地仓库server1
docker pull per
docker tag perl:latest reg.westos.org/library/perl:latest
docker push reg.westos.org/library/perl:latest
vim job.yml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
kubectl apply -f job.yml
kubectl logs pi-sxrl7

(5)CronJob
Cron Jobは、タイムスケジューリングに基づいてジョブを作成します。
CronJobオブジェクトは、crontab(cronテーブル)ファイルの行のようなものです。Cron形式で記述され、指定されたスケジュールされた時間に定期的にジョブを実行します。
vim cronjob.yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busyboxplus
imagePullPolicy: IfNotPresent
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
kubectl logs hello-1614059700-8sxjp
kubectl get cronjobs.batch
kubectl describe cronjobs.batch

Two.service
(1)サービスは、同じサービスを提供するポッドの外部アクセスインターフェイスのセットと見なすことができます。サービスの助けを借りて、アプリケーションはサービス検出と負荷分散を簡単に実現できます。サービスはデフォルトで4層の負荷分散機能のみをサポートし、層7の機能はありません。他の方法で実装できます(入力)。
(2)サービスタイプ:
ClusterIP:デフォルト値、k8sシステムによってサービスに自動的に割り当てられた仮想IPは、クラスター内でのみアクセスできます。
NodePort:指定されたノードのポートを介してサービスを外部に公開します。NodeIPへのアクセス:nodePortはClusterIPにルーティングされます。
LoadBalancer:NodePortに基づいて、クラウドプロバイダーを利用して外部ロードバランサーを作成し、リクエストをNodePortに転送します。このモードはクラウドサーバーでのみ使用できます。
ExternalName:DNS CNAMEレコードを介して指定されたドメイン名にサービスを転送します(spec.externlName
(3)によって設定されます)IPVSモードの
サービスサービスは、kube -proxyコンポーネントと、
プロセスを介してポッドおよびサービスアクセスkube-proxyを実現するiptablesで構成されますof iptables処理サービスでは、ホストに多数のiptablesルールを設定する必要があります。ホストに多数のポッドがある場合、iptablesルールを絶えず更新すると、大量のCPUリソースが消費されます
。service-> pod:IPVSモードのサービス使用するK8sクラスターはより多くのレベルのポッド
ポッド->サービスをサポートします:iptables
kubectl -n kube-system get pod etcd-server2 #所有的配置信息
vim demo1.yml
---
apiVersion: v1
kind: Service
metadata:
name: myservice1
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo1
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:v1
# 开启kube-proxy的ipvs模式
yum install -y ipvsadm #所有节点安装
kubectl apply -f demo1.yml
kubectl -n kube-system edit cm kube-proxy #修改IPVS模式,配置文件,需要重启pod
# mode: "ipvs"
kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}' #更新kube-proxy pod,就是重建pod
ipvsadm -ln
kubectl get all
kube-proxyは、Linux IPVSモジュールを使用して、サービス内のポッドをrrポーリングモードでスケジュールします
。IPVSモードでは、サービスの作成後にkube-proxyがホストマシンに仮想ネットワークカードkube-ipvs0を追加し、割り当てます。サービスIP