このKubernetesのヒントでは、Kubernetesでサービスを削除する方法について学習します。
Kubernetesサービスとは何ですか?
サービスにより、アプリケーション内外のさまざまなコンポーネント間の通信が可能になります。 Kubernetesサービスは、アプリケーションを他のアプリケーションやユーザーと接続するのに役立ちます。安定した仮想IP(VIP)アドレスを提供します。サービスIPを使用することで、クライアントはポッド内で実行されているコンテナに確実に接続できます。
たとえば、アプリケーションには、ユーザーにフロントエンドの負荷を提供するためのグループやバックエンドプロセスを実行するための他のグループ、外部データソースに接続するための3番目のグループなど、さまざまなセクションで実行されるポッドのグループがあります。
これらのポッドグループ間の接続を可能にするサービスです。クラスタ内で必要な数のサービスを利用できます。
なぜサービスを使用するのですか?
Kubernetesポッドは、クラスターの状態に合わせて作成および破棄されるため、信頼性が低く、永続的ではないリソースです。アプリを実行するためにKubernetesデプロイを作成すると、ポッドが動的に作成および破棄される可能性があります。
すべてのポッドには独自のIPアドレスがあり、そのポッドが破壊されて新しいものが登場する可能性があるため、後で変更される可能性があります。
これは問題につながります。ポッドのセット(「バックエンド」と呼びます)がクラスター内の他のポッド(「フロントエンド」と呼びます)に機能を提供する場合、フロントエンドはどのIPアドレスに接続するかをどのように見つけて追跡しますか、フロントエンドがワークロードのバックエンド部分を使用できるようにしますか?
これが、Kubernetesアーキテクトがサービスと呼ばれるソリューションを考案した理由です。
Kubernetesサービスの削除
まず、kubernetesクラスターで利用可能なサービスを一覧表示します。
このコマンドは、すべての名前空間内で作成されたすべてのサービスを一覧表示します:
[email protected]:~/pod-create# kubectl get svc --all-namespaces -o wide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24d <none>
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 64d k8s-app=kube-dns
webapps my-dep-svc ClusterIP 10.100.159.167 <none> 8080/TCP 2m45s tier=front-end
my-dep-svc
という名前のサービスが表示されます webapps
内で作成 名前空間。
その機能をすばやく理解するために、そのサービスについて説明しましょう。
[email protected]:~/pod-create# kubectl describe svc my-dep-svc --namespace=webapps
Name: my-dep-svc
Namespace: webapps
Labels: <none>
Annotations: Selector: tier=front-end
Type: ClusterIP
IP: 10.100.159.167
Port: <unset> 8080/TCP
TargetPort: 80/TCP
Endpoints: 172.16.213.223:80,172.16.213.5:80
Session Affinity: None
Events: <none>
前述したように、サービスはポッドのグループです。このサービスには、これに関連付けられた2つのエンドポイントがある可能性があります。おそらく将来の記事でエンドポイントの関連付けについて詳しく説明します。
サービスmy-dep-svc
仮想IPが割り当てられている10.100.159.167
。
簡単なデモとして、サービスIP(10.100.159.167)とそのポート(8080)を使用して、これら2つのエンドポイント(ポッド)で実行されているアプリケーションにアクセスしてみましょう。
[email protected]:~/pod-create# curl 10.100.159.167:8080
<html><body><h1>It works!</h1></body></html>
[email protected]:~/pod-create#
Kubernetesサービスについての基本的な考え方はもうわかっていると思います。
現在、Kubernetesでサービスを削除する方法は2つあります。それらを1つずつ見てみましょう。
方法1:kubectldeleteコマンドを使用してサービスを削除します
kubectlコマンドにリソース名を直接指定することで、Kubernetesのサービスを削除できます:
[email protected]:~/pod-create# kubectl delete svc --namespace=webapps my-dep-svc
service "my-dep-svc" deleted
ここで、すべてのサービスをリストアップすると、次のようになります。
[email protected]:~/pod-create# kubectl get svc --all-namespaces -o wide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24d <none>
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 64d k8s-app=kube-dns
方法2:作成されたのと同じYAMLファイルを参照して削除します
サービスmy-dep-svc
の元となるYAML構成ファイル 作成されました。
[email protected]:~/pod-create# cat my-dep-svc.yml
apiVersion: v1
kind: Service
metadata:
name: my-dep-svc
namespace: webapps
spec:
selector:
tier: front-end
ports:
- protocol: TCP
port: 8080
targetPort: 80
次に、サービスの作成に使用したものと同じYAMLファイルを参照してサービスを削除します。
[email protected]:~/pod-create# kubectl delete -f my-dep-svc.yml
service "my-dep-svc" deleted
もう一度すべてのサービスをリストアップします。
[email protected]:~/pod-create# kubectl get svc --all-namespaces -o wide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24d <none>
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 64d k8s-app=kube-dns
それでおしまい。 Kubernetesでサービスを削除する方法を学びました。今後ともよろしくお願いいたします。