在这个 Kubernetes 技巧中,您将了解如何在 Kubernetes 中删除服务。
什么是 Kubernetes 服务?
服务支持应用程序内外的各种组件之间的通信。 Kubernetes 服务可帮助您将应用程序与其他应用程序或用户连接在一起。 它提供稳定的虚拟 IP (VIP) 地址。 通过使用服务 IP,客户端可以可靠地连接到在 pod 内运行的容器。
为了 example,您的应用程序具有为各个部分运行的 pod 组,例如用于为用户提供前端负载的组和用于运行后端进程的其他组以及连接到外部数据源的第三组。
正是服务在这些 pod 组之间实现了连接。 您可以在集群中拥有任意数量的服务。
我们为什么使用服务?
Kubernetes Pod 是不可靠且非永久性的资源,因为它们被创建和销毁以匹配集群的状态。 当您创建 Kubernetes Deployment 来运行您的应用程序时,它可以动态创建和销毁 Pod。
每个 pod 都有自己的 IP 地址,并且可能会在以后更改,因为该 pod 可能会被破坏并且可能会出现新的。
这会导致一个问题:如果一组 Pod(称它们为“后端”)为集群内的其他 Pod(称它们为“前端”)提供功能,那么前端如何找出并跟踪要连接的 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>
正如我之前提到的,服务是一组 pod。 您可以认为该服务有两个与之关联的端点。 更多关于端点关联的信息可能会在未来的文章中。
服务 my-dep-svc
有一个分配给它的虚拟 IP 10.100.159.167
.
为了快速演示,让我们尝试使用服务 IP (10.100.159.167) 及其端口 (8080) 访问在这两个端点 (pod) 上运行的应用程序。
[email protected]:~/pod-create# curl 10.100.159.167:8080
<html><body><h1>It works!</h1></body></html>
[email protected]:~/pod-create#
我想你现在可能已经对 Kubernetes 服务有了一个基本的了解。
现在,在 Kubernetes 中有两种删除服务的方法。 让我们一一看看。
方法一:使用 kubectl delete 命令删除服务
您可以通过直接向 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 文件来删除
服务所在的 YAML 配置文件 my-dep-svc
被创建。
[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 中删除服务。 请继续关注更多。