Kubernetes----服务Service的常用操作

简介: Kubernetes----服务Service的常用操作

一、Service

1.1 准备条件(创建一个deployment)

创建deployment_nginx.yaml文件,内容如下

apiVersion: v1
kind: Namespace
metadata:
  name: dev
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx:1.17.1
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP

使用如下命令创建deployment资源

[root@master demo]# kubectl create -f deployment-nginx.yaml
namespace/dev created
deployment.apps/nginx created
[root@master demo]#

如下,可以查看到deployment和pod信息

[root@master demo]# kubectl get deployment,pod -n dev
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   3/3     3            3           44s

NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-66ffc897cf-9mtc6   1/1     Running   0          44s
pod/nginx-66ffc897cf-d5pfj   1/1     Running   0          44s
pod/nginx-66ffc897cf-xnk9j   1/1     Running   0          44s
[root@master demo]#

为查看到访问的ip和端口,需要使用如下命令

[root@master demo]# kubectl get deployment,pod -n dev -o wide
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
deployment.apps/nginx   3/3     3            3           92s   nginx        nginx:1.17.1   run=nginx

NAME                         READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
pod/nginx-66ffc897cf-9mtc6   1/1     Running   0          92s   10.244.1.14   node1   <none>           <none>
pod/nginx-66ffc897cf-d5pfj   1/1     Running   0          92s   10.244.2.23   node2   <none>           <none>
pod/nginx-66ffc897cf-xnk9j   1/1     Running   0          92s   10.244.1.15   node1   <none>           <none>
[root@master demo]#

1.2 集群内部访问nginx的方式

如下,在集群内部,使用上述查询到的ip和端口是可以访问的

[root@master demo]# curl 10.244.1.14:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master demo]#

1.3 仅使用Deployment访问Pod存在的问题

通过Deployment创建一组pod提供高可用的服务,虽然每个Pod都会分配一个单独的Pod IP,但是存在如下问题:

  • Pod IP会随着pod的重建产生变化
  • Pod IP仅仅是集群内可见的虚拟IP,外部无法访问

二、命令方式操作Service

2.1 暴露集群IP和端口号,解决IP随Pod变化的问题

如下,暴露80端口

[root@master demo]# kubectl expose deployment nginx --name=service-nginx --type=ClusterIP --port=80 --target-port=80 -n dev
service/service-nginx exposed
[root@master demo]#

如下:可查询到Service的集群IP

[root@master demo]# kubectl get service -n dev
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service-nginx   ClusterIP   10.100.195.186   <none>        80/TCP    13m
[root@master demo]#

此时,在集群环境中访问nginx,如下,没有任何问题,及时将三个pod删除,然后deployment控制器重新自动创建,此时改变的是pod的ip,而service的集群ip始终不变,这就解决了Pod的ip随着重新创建而发生改变的问题

[root@master demo]# curl 10.100.195.186:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master demo]#

2.2 暴露NodePort类型,解决集群外无法访问的问题

如下,再创建一个service,此时类型为NodePort类型

[root@master demo]# kubectl expose deployment nginx --name=service-nginx-2 --type=NodePort --port=80 --target-port=80 -n dev
service/service-nginx-2 exposed
[root@master demo]#

此时通过如下命令查询暴露出来的ip和端口

[root@master demo]# kubectl get service -n dev
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service-nginx     ClusterIP   10.100.195.186   <none>        80/TCP         21m
service-nginx-2   NodePort    10.108.250.205   <none>        80:30141/TCP   42s
[root@master demo]#

这里,集群之外可以通过 http://192.168.16.40:30141/ 访问,其中192.168.16.40为master节点的ip地址
在这里插入图片描述

2.3 通过命令的方式删除Service

如下,将上述创建的额两个service删除

[root@master demo]# kubectl delete service service-nginx -n dev
service "service-nginx" deleted
[root@master demo]# kubectl delete service service-nginx-2 -n dev
service "service-nginx-2" deleted
[root@master demo]#

三、配置文件方式操作Service

3.1 配置文件方式配置Cluster类型的Service

编辑service-nginx.yaml文件,内容如下:

apiVersion: v1
kind: Service
metadata:
  name: service-nginx
  namespace: dev
spec:
  clusterIP: 10.108.179.231
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: ClusterIP

如下命令创建

[root@master demo]# kubectl create -f service-nginx.yaml
service/service-nginx created
[root@master demo]#

如下,查询集群ip和端口

[root@master demo]# kubectl get service -n dev
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service-nginx   ClusterIP   10.108.179.231   <none>        80/TCP    40s
[root@master demo]#

此时在集群内部通过集群ip和端口可以访问nginx

[root@master demo]# curl 10.108.179.231:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master demo]#

3.2 配置文件方式创建NodePort类型的Service

编辑service-nginx2.yaml文件,内容如下:

apiVersion: v1
kind: Service
metadata:
  name: service-nginx2
  namespace: dev
spec:
  ports:
  - port: 30030
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: NodePort
[root@master demo]# kubectl create -f service-nginx2.yaml
service/service-nginx2 created

使用如下命令创建Service

[root@master demo]# kubectl create -f service-nginx2.yaml
service/service-nginx2 created
[root@master demo]#

查询service创建结果,如下:

[root@master demo]# kubectl get service -n dev
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
service-nginx    ClusterIP   10.108.179.231   <none>        80/TCP            9m15s
service-nginx2   NodePort    10.101.58.195    <none>        30030:31081/TCP   2m58s
[root@master demo]#

此时通过访问http://192.168.16.40:31081/即可在集群外访问nginx,其中192.168.16.40为master节点的主机ip地址,

在这里插入图片描述

3.3 使用配置文件的方式删除Service

如下:

[root@master demo]# kubectl delete -f service-nginx.yaml
service "service-nginx" deleted
[root@master demo]# kubectl delete -f service-nginx2.yaml
service "service-nginx2" deleted
[root@master demo]#
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
4月前
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
188 1
K8S的Service的LoadBanlance之Metallb解决方案
|
3月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
168 60
|
3月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
292 62
|
2月前
|
存储 Kubernetes 网络协议
k8s的无头服务
Headless Service 是一种特殊的 Kubernetes 服务,其 `spec:clusterIP` 设置为 `None`,不会分配 ClusterIP,通过 DNS 解析提供服务发现。与普通服务不同,Headless Service 不提供负载均衡功能,每个 Pod 都有唯一的 DNS 记录,直接映射到其 IP 地址,适用于有状态应用的场景,如与 StatefulSet 一起部署数据库。示例中通过创建 Nginx 的 StatefulSet 和 Headless Service,展示了如何直接访问单个 Pod 并进行内容修改。
68 3
|
3月前
|
Prometheus Kubernetes 监控
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
162 1
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
|
2月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
82 0
|
3月前
|
负载均衡 Kubernetes 区块链
随机密码生成器+阿里k8s负载均衡型服务加证书方法+移动终端设计+ico生成器等
随机密码生成器+阿里k8s负载均衡型服务加证书方法+移动终端设计+ico生成器等
78 1
|
3月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
|
3月前
|
Kubernetes 监控 调度
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
136 1
|
3月前
|
Kubernetes 应用服务中间件 nginx
k8s基础使用--使用k8s部署nginx服务
本文介绍了Kubernetes中核心概念Deployment、Pod与Service的基本原理及应用。Pod作为最小调度单元,用于管理容器及其共享资源;Deployment则负责控制Pod副本数量,确保其符合预期状态;Service通过标签选择器实现Pod服务的负载均衡与暴露。此外,还提供了具体操作步骤,如通过`kubectl`命令创建Deployment和Service,以及如何验证其功能。实验环境包括一台master节点和两台worker节点,均已部署k8s-1.27。
257 1

热门文章

最新文章