Kubernetes でのコンテナ検出について理解していますか?

Kubernetes でのコンテナ検出について理解していますか?

1. 概要

コンテナ検出は、コンテナ内のアプリケーション インスタンスが適切に動作しているかどうかを検出するために使用されます。これは、ビジネスの可用性を確保するための従来のメカニズムです。検出後、インスタンスのステータスが期待どおりでない場合、Kubernetes は問題のあるインスタンスを「削除」し、ビジネス トラフィックを処理しなくなります。 Kubernetes は、コンテナ検出を実装するための 2 つのプローブを提供します。

  • 活性プローブ: 活性プローブは、アプリケーション インスタンスが現在正常に動作しているかどうかを検出するために使用されます。そうでない場合、k8sはコンテナを再起動します
  • 準備状況プローブ: 準備状況プローブは、アプリケーション インスタンスが現在リクエストを受信できるかどうかを検出するために使用されます。そうでない場合、k8sはトラフィックを転送しません

livenessProbe はコンテナを再起動するかどうかを決定し、readinessProbe はリクエストをコンテナに転送するかどうかを決定します。

上記の 2 つのプローブは現在、次の 3 つの検出方法をサポートしています。

  • コマンド実行: コンテナ内でコマンドを実行します。コマンド実行の終了コードが 0 の場合、プログラムは正常とみなされ、それ以外の場合は異常とみなされます。
 …… livenessProbe: exec: command: - cat - /tmp/healthy ……

  • TCPSocket: ユーザー コンテナのポートにアクセスしようとします。接続を確立できればプログラムは正常とみなされ、そうでない場合は異常とみなされます。
 …… livenessProbe: tcpSocket: port: 8080 ……

  • HTTPGet: コンテナ内の Web アプリケーションの URL を呼び出します。返されたステータス コードが 200 ~ 399 の場合、プログラムは正常であるとみなされます。そうでなければ異常です。
 …… livenessProbe: httpGet: path: / #URI地址port: 80 #端口号host: 127.0.0.1 #主机地址scheme: HTTP #支持的协议,http或者https ……

2. 生存探査

(1)実行モード

pod-liveness-exec.yaml を作成します。

 apiVersion: v1 kind: Pod metadata: name: pod-liveness-exec namespace: dev spec: containers: - name: nginx image: nginx ports: - name: nginx-port containerPort: 80 livenessProbe: exec: command: ["/bin/cat","/tmp/hello.txt"] # 执行一个查看文件的命令

/tmp/hello.txt ファイルが存在しないため、コンテナは繰り返し再起動されます。

 #进入yaml目录[root@k8s-master ~]# ls anaconda-ks.cfg pod-liveness-exec.yaml [root@k8s-master ~]# clear [root@k8s-master ~]# [root@k8s-master ~]# #查看当前dev命名空间下无pod [root@k8s-master ~]# kubectl get pod -n dev No resources found in dev namespace. [root@k8s-master ~]# #创建pod [root@k8s-master ~]# kubectl apply -f pod-liveness-exec.yaml pod/pod-liveness-exec created [root@k8s-master ~]# #再次查看dev命名空间已创建pod [root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-exec 0/1 ContainerCreating 0 5s #查看pod详情[root@k8s-master ~]# kubectl describe pod pod-liveness-exec -n dev #在最下面Events中,容器创建过程报错Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 28s default-scheduler Successfully assigned dev/pod-liveness-exec to k8s-node2 Normal Pulling 27s kubelet Pulling image "nginx" Normal Pulled 11s kubelet Successfully pulled image "nginx" in 15.48165061s Normal Created 11s kubelet Created container nginx Normal Started 11s kubelet Started container nginx Warning Unhealthy 7s kubelet Liveness probe failed: /bin/cat: /tmp/hello.txt: No such file or directory #再次频繁查看dev下pod信息可以发现pod的重启次数一直在增加[root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-exec 1/1 Running 3 (53s ago) 2m54s [root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-exec 1/1 Running 4 (20s ago) 3m1s

今回は、既存のファイルを表示するために yaml を変更します。

 apiVersion: v1 kind: Pod metadata: name: pod-liveness-exec namespace: dev spec: containers: - name: nginx image: nginx ports: - name: nginx-port containerPort: 80 livenessProbe: exec: command: ["/bin/cat","/usr/share/nginx/html/index.html"] # 执行一个查看文件的命令此文件为nginx欢迎页面因为我们的容器就是nginx所以这个文件肯定存在的

効果をもう一度見てみましょう:

(2)TCPソケットモード

pod-liveness-tcpsocket.yaml を作成します。

 apiVersion: v1 kind: Pod metadata: name: pod-liveness-tcpsocket namespace: dev spec: containers: - name: nginx image: nginx ports: - name: nginx-port containerPort: 80 livenessProbe: tcpSocket: port: 8080 # 尝试访问8080端口,端口不存在

コンテナ内でポート 8080 が開いていないため、接続は失敗します。

 [root@k8s-master ~]# ls anaconda-ks.cfg pod-liveness-tcpsocket.yaml [root@k8s-master ~]# #创建pod [root@k8s-master ~]# kubectl apply -f pod-liveness-tcpsocket.yaml pod/pod-liveness-tcpsocket created [root@k8s-master ~]# #获取pod [root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-tcpsocket 1/1 Running 0 12s #查看详情可以看出最后一步连接被拒绝[root@k8s-master ~]# kubectl describe pod pod-liveness-tcpsocket -n dev Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s default-scheduler Successfully assigned dev/pod-liveness-tcpsocket to k8s-node2 Normal Pulling 22s kubelet Pulling image "nginx" Normal Pulled 21s kubelet Successfully pulled image "nginx" in 475.556438ms Normal Created 21s kubelet Created container nginx Normal Started 21s kubelet Started container nginx Warning Unhealthy 2s (x2 over 12s) kubelet Liveness probe failed: dial tcp 172.17.169.138:8080: connect: connection refused #频繁获取pod详情可以看出重启次数也在不断增加[root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-tcpsocket 1/1 Running 3 (32s ago) 2m13s [root@k8s-master ~]# [root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-tcpsocket 1/1 Running 3 (46s ago) 2m27s [root@k8s-master ~]# [root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-tcpsocket 1/1 Running 4 (16s ago) 2m37s

次に、tcpSocket.port を 80 に変更し、上記の手順を繰り返すと、コンテナーが正常に起動することがわかります。

(3)HTTPGetモード

pod-liveness-httpget.yaml を作成します。

 apiVersion: v1 kind: Pod metadata: name: pod-liveness-httpget namespace: dev spec: containers: - name: nginx image: nginx ports: - name: nginx-port containerPort: 80 livenessProbe: httpGet: # 其实就是访问http://127.0.0.1:80/hello scheme: HTTP #支持的协议,http或者https port: 80 #端口号path: /hello #URI地址此地址不存在

[root@k8s-master ~]# #创建pod [root@k8s-master ~]# kubectl apply -f pod-liveness-httpget.yaml pod/pod-liveness-httpget created #获取pod [root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-httpget 0/1 ContainerCreating 0 7s [root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-httpget 0/1 ContainerCreating 0 13s #查看pod详情发现最后HTTP执行报404 [root@k8s-master ~]# kubectl describe pod pod-liveness-httpget -n dev Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 24s default-scheduler Successfully assigned dev/pod-liveness-httpget to k8s-node2 Normal Pulling 23s kubelet Pulling image "nginx" Normal Pulled 8s kubelet Successfully pulled image "nginx" in 15.416092349s Normal Created 8s kubelet Created container nginx Normal Started 8s kubelet Started container nginx Warning Unhealthy 4s kubelet Liveness probe failed: HTTP probe failed with statuscode: 404 #频繁获取pod,发现pod重启次数不断增加[root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-httpget 1/1 Running 0 36s [root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-httpget 1/1 Running 1 (3s ago) 43s [root@k8s-master ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pod-liveness-httpget 1/1 Running 2 (47s ago) 117s

次に、httpGet.path を / に変更し、上記の手順を繰り返すと、コンテナーが正常に起動することがわかります。

これまでに、Liveness Probe を使用した 3 つの検出方法が実証されています。ただし、livenessProbe のサブプロパティを見ると、これら 3 つの方法に加えて、ここで説明する他の構成がいくつかあることがわかります。

 [root@k8s-master01 ~]# kubectl explain pod.spec.containers.livenessProbe FIELDS: exec <Object> tcpSocket <Object> httpGet <Object> initialDelaySeconds <integer> # 容器启动后等待多少秒执行第一次探测timeoutSeconds <integer> # 探测超时时间。默认1秒,最小1秒periodSeconds <integer> # 执行探测的频率。默认是10秒,最小1秒failureThreshold <integer> # 连续探测失败多少次才被认定为失败。默认是3。最小值是1 successThreshold <integer> # 连续探测成功多少次才被认定为成功。默认是1

<<:  クラウドへの移行は最善の選択肢ではないかもしれない

>>:  光ファイバー相互接続: クラウド コンピューティング ネットワークを改善する方法

推薦する

gcore - 3.25€/KVM/512MB RAM/無制限帯域幅/ルクセンブルク/マイアミ

gcorelabs は近年かなり有名になってきており、独立サーバー、VPS、CDN などの売れ行きが...

推奨: Hostmist - $11.5/年/128MB RAM/10GB ハードドライブ/150GB トラフィック

Hostmist は以前、主要なフォーラム、特にホスティングに関する海外のブログやフォーラムでよく見...

仮想オペレーターはどのような革新を起こせるでしょうか?

「バーチャルオペレーター」が登場し、大変人気を博しています。 Snail Mobileの「カード不要...

raksmart: 米国\香港\日本\韓国\シンガポール、独立サーバーは月額 46 ドルから、10G の大容量帯域幅\300G の高防御 (CC は無視)\マルチ C セグメント クラスター サーバー

良い海外サーバーを探したいですか?香港サーバー、日本サーバー、韓国サーバー、アメリカサーバーがあり、...

onetechcloud: US cn2 gia vps、58元/月、1.4Tトラフィック/月、KVM/1Gメモリ/1コア/15g SSD

onetechcloudのUS cn2 gia vps特別イベントでは、月払いで20%割引、四半期払...

SEOのプロセス方法

一般的に、SEO 最適化は次の 4 つの主要な部分で構成されます。最初のウェブサイト内部構造の最適化...

HostSolutions: 月額 1.56 ドル、KVM/512M メモリ/1T ハードディスク/5T トラフィック、著作権侵害苦情、DDOS の高度な防御保護

ルーマニアのホスティングプロバイダー HostSolutions は、ハロウィーンの前に大規模なプロ...

mivocloud-3 ユーロ/openstack/1g メモリ/20g SSD/無制限トラフィック/Voxility による保護

モルドバ共和国のクラウド ホスティング会社 mivocloud.com は、OpenStack クラ...

健康関連商品の個人ウェブサイトを登録しないとリスクに直面する

まず第一に、私はクリックベイトではないことを明確にしておく必要があります。これは私に起こった本当の話...

江蘇省工業情報化部のチー・ユー副部長と代表団が華雲データグループを視察

3月6日、江蘇省党委メンバーで江蘇省工業情報化部の副部長である池宇氏とその代表団が調査と研究のため華...

virpus-7 USD/3か月/512Mメモリ/onappクラウド

この VPS の機能についてお話ししましょう。onapp ベース、XEN 仮想化、データ損失の心配な...

何年も SEO に携わった後、私はすべてを失いました。今回はユーザーだけを気にしています。

みなさんこんにちは。私は四海釣魚網(www.sihaidiaoyu.com)のウェブマスターです。ま...

Alibaba Cloud は、1 億 5,800 万コア時間のクラウド レンダリングにより、中国の大ヒット漫画「新神:楊堅」の視覚効果の向上に貢献しました。

現在、ライトチェイサーアニメーションの新作『新神:楊堅』(以下、『楊堅』)が劇場で公開されており、制...

Sina WeiboとTencent Weibo: ページとフレームの違い

現在のWeibo市場は基本的にSina WeiboとTencent Weiboが独占しています。多く...

Baidu は本当に Baidu Space の新バージョンの記事を含めないのでしょうか?

ウェブマスターであろうと SEO 最適化担当者であろうと、Baidu Space をよくご存知だと思...