KUBERNETES-1-8-Service服务资源

1.vim redis-svc.yaml创建资源文件。kubectl apply -f redis-svc.yaml声明资源。kubectl describe svc redis查看svc资源详细信息。

[root@master manifests]# vim redis-svc.yaml
[root@master manifests]# cat redis-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: default
spec:
  selector:
    app: redis
    role: logstor
  clusterIP: 10.97.97.97
  type: ClusterIP
  ports:
  - port: 6379
    targetPort: 6379
    
[root@master manifests]# kubectl apply -f redis-svc.yaml 
service/redis created
[root@master manifests]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP    4d
redis        ClusterIP   10.97.97.97   <none>        6379/TCP   5s

[root@master manifests]# kubectl describe svc redis
Name:              redis
Namespace:         default
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"redis","namespace":"default"},"spec":{"clusterIP":"10.97.97.97","ports":[{"por...
Selector:          app=redis,role=logstor
Type:              ClusterIP
IP:                10.97.97.97
Port:              <unset>  6379/TCP
TargetPort:        6379/TCP
Endpoints:         10.244.1.45:6379
Session Affinity:  None
Events:            <none>
 

2.vim myapp-svc.yaml创建资源文件(特别注意:这里的selector:一定要写对并反复确认,否则后面)。kubectl apply -f myapp-svc.yaml声明资源。kubectl describe svc myapp查看服务的详细信息。while true;do curl http://172.20.0.128:30080/hostname.html; sleep 1; done进行网络访问测试,可以看到转发不固定pod(这时因为默认是"sessionAffinity":"None")。

[root@master manifests]# cp redis-svc.yaml myapp-svc.yaml
[root@master manifests]# vim myapp-svc.yaml 
[root@master manifests]# cat myapp-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  selector:
    app: myapp
    release: canary
  clusterIP: 10.99.99.99
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
[root@master manifests]# kubectl apply -f myapp-svc.yaml 
service/myapp created
[root@master manifests]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        4d
myapp        NodePort    10.99.99.99   <none>        80:30080/TCP   3s
redis        ClusterIP   10.97.97.97   <none>        6379/TCP       1h
[root@master manifests]# kubectl describe svc myapp
Name:                     myapp
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"myapp","namespace":"default"},"spec":{"clusterIP":"10.99.99.99","ports":[{"nod...
Selector:                 app=myapp,release=canary
Type:                     NodePort
IP:                       10.99.99.99
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30080/TCP
Endpoints:                10.244.1.41:80,10.244.1.42:80,10.244.1.43:80 + 2 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
[root@node1 ~]# while true;do curl http://172.20.0.128:30080/hostname.html; sleep 1; done

myapp-deploy-69b47bc96d-pq57k
myapp-deploy-69b47bc96d-26xqh
myapp-deploy-69b47bc96d-pq57k
myapp-deploy-69b47bc96d-lts6j
myapp-deploy-69b47bc96d-pq57k
myapp-deploy-69b47bc96d-26xqh
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-nw66w
myapp-deploy-69b47bc96d-pq57k
myapp-deploy-69b47bc96d-nw66w
myapp-deploy-69b47bc96d-nw66w
myapp-deploy-69b47bc96d-lts6j
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-26xqh
myapp-deploy-69b47bc96d-lts6j
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-lts6j
myapp-deploy-69b47bc96d-pq57k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-26xqh
myapp-deploy-69b47bc96d-pq57k
 

 

3."sessionAffinity":"ClientIP"的作用。kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"ClientIP"}}'对服务的参数进行修改。kubectl describe svc myapp查看服务的详细信息。while true;do curl http://172.20.0.128:30080/hostname.html; sleep 1; done进行网络访问测试,可以看到转发固定pod。

[root@master manifests]# kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"ClientIP"}}'
service/myapp patched
[root@master manifests]# kubectl describe svc myapp
Name:                     myapp
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"myapp","namespace":"default"},"spec":{"clusterIP":"10.99.99.99","ports":[{"nod...
Selector:                 app=myapp,release=canary
Type:                     NodePort
IP:                       10.99.99.99
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30080/TCP
Endpoints:                10.244.1.41:80,10.244.1.42:80,10.244.1.43:80 + 2 more...
Session Affinity:         ClientIP
External Traffic Policy:  Cluster
Events:                   <none>

[root@node1 ~]# while true;do curl http://172.20.0.128:30080/hostname.html; sleep 1; done
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-5lv7k
 

4."sessionAffinity":"None"的作用。kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"None"}}'对服务的参数进行修改。kubectl describe svc myapp查看服务的详细信息。while true;do curl http://172.20.0.128:30080/hostname.html; sleep 1; done进行网络访问测试,可以看到转发不固定pod。

[root@master manifests]# kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"None"}}'
service/myapp patched
[root@master manifests]# kubectl describe svc myapp
Name:                     myapp
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"myapp","namespace":"default"},"spec":{"clusterIP":"10.99.99.99","ports":[{"nod...
Selector:                 app=myapp,release=canary
Type:                     NodePort
IP:                       10.99.99.99
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30080/TCP
Endpoints:                10.244.1.41:80,10.244.1.42:80,10.244.1.43:80 + 2 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
[root@node1 ~]# while true;do curl http://172.20.0.128:30080/hostname.html; sleep 1; done
myapp-deploy-69b47bc96d-26xqh
myapp-deploy-69b47bc96d-26xqh
myapp-deploy-69b47bc96d-pq57k
myapp-deploy-69b47bc96d-pq57k
myapp-deploy-69b47bc96d-5lv7k
myapp-deploy-69b47bc96d-lts6j
myapp-deploy-69b47bc96d-lts6j
myapp-deploy-69b47bc96d-nw66w
myapp-deploy-69b47bc96d-nw66w
myapp-deploy-69b47bc96d-lts6j
myapp-deploy-69b47bc96d-26xqh
 

5.vim myapp-svc-headless.yaml创建资源文件。vim myapp-svc-headless.yaml声明资源。kubectl get svc获取服务信息。 dig -t A myapp-svc.default.svc.cluster.local. @10.96.0.10对服务进行解析。kubectl get svc -n kube-system获取kube-dns解析服务的地址。kubectl get pods -o wide -l app=myapp查看pod的地址信息与服务解析的地址信息对比进行确认。dig -t A myapp.default.svc.cluster.local. @10.96.0.10对服务进行解析,这次只能解析到myapp.default.svc.cluster.local. 5 IN    A    10.99.99.99即CLUSTER-IP(service服务),无法解析到Pod。

[root@master manifests]# cp myapp-svc.yaml myapp-svc-headless.yaml 

[root@master manifests]# vim myapp-svc-headless.yaml
[root@master manifests]# cat myapp-svc-headless.yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
  namespace: default
spec:
  selector:
    app: myapp
    release: canary
  clusterIP: None
  ports:
  - port: 80
    targetPort: 80

[root@master manifests]# kubectl apply -f myapp-svc-headless.yaml 
service/myapp-svc created
[root@master manifests]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        4d
myapp        NodePort    10.99.99.99   <none>        80:30080/TCP   15m
myapp-svc    ClusterIP   None          <none>        80/TCP         6s
redis        ClusterIP   10.97.97.97   <none>        6379/TCP       1h
[root@master manifests]# dig -t A myapp-svc.default.svc.cluster.local. @10.96.0.10

; <<>> DiG 9.9.4-RedHat-9.9.4-72.el7 <<>> -t A myapp-svc.default.svc.cluster.local. @10.96.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49752
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;myapp-svc.default.svc.cluster.local. IN    A

;; ANSWER SECTION:
myapp-svc.default.svc.cluster.local. 5 IN A    10.244.1.41
myapp-svc.default.svc.cluster.local. 5 IN A    10.244.1.42
myapp-svc.default.svc.cluster.local. 5 IN A    10.244.1.43
myapp-svc.default.svc.cluster.local. 5 IN A    10.244.2.46
myapp-svc.default.svc.cluster.local. 5 IN A    10.244.2.47

;; Query time: 0 msec
;; SERVER: 10.96.0.10#53(10.96.0.10)
;; WHEN: Tue Dec 11 09:17:21 EST 2018
;; MSG SIZE  rcvd: 319

[root@master manifests]# kubectl get svc -n kube-system
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP   4d
[root@master manifests]# kubectl get pods -o wide -l app=myapp
NAME                            READY     STATUS    RESTARTS   AGE       IP            NODE
myapp-deploy-69b47bc96d-26xqh   1/1       Running   0          4h        10.244.1.42   node1.example.com
myapp-deploy-69b47bc96d-5lv7k   1/1       Running   0          4h        10.244.1.41   node1.example.com
myapp-deploy-69b47bc96d-lts6j   1/1       Running   0          4h        10.244.2.46   node2.example.com
myapp-deploy-69b47bc96d-nw66w   1/1       Running   0          4h        10.244.2.47   node2.example.com
myapp-deploy-69b47bc96d-pq57k   1/1       Running   0          4h        10.244.1.43   node1.example.com
[root@master manifests]# dig -t A myapp.default.svc.cluster.local. @10.96.0.10

; <<>> DiG 9.9.4-RedHat-9.9.4-72.el7 <<>> -t A myapp.default.svc.cluster.local. @10.96.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40394
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;myapp.default.svc.cluster.local. IN    A

;; ANSWER SECTION:
myapp.default.svc.cluster.local. 5 IN    A    10.99.99.99

;; Query time: 0 msec
;; SERVER: 10.96.0.10#53(10.96.0.10)
;; WHEN: Tue Dec 11 09:18:59 EST 2018
;; MSG SIZE  rcvd: 107
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 io.fabric8 kubernetes-client 集成到 Spring Boot 应用程序中,需要进行以下步骤: 1. 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>io.fabric8</groupId> <artifactId>kubernetes-client</artifactId> <version>5.7.0</version> </dependency> ``` 2. 在 Spring Boot 应用程序的配置文件中,添加 Kubernetes 的配置信息。例如,可以在 application.yml 文件中添加以下信息: ```yaml kubernetes: masterUrl: https://your-kubernetes-master-url.com namespace: your-namespace authToken: your-auth-token ``` 其中,masterUrl 指定了 Kubernetes API Server 的地址,namespace 指定了要操作的 Kubernetes 命名空间,authToken 指定了访问 Kubernetes API Server 的认证令牌。 3. 在 Spring Boot 应用程序中,注入 KubernetesClient 对象。例如,可以在一个自定义的 Spring Bean 中注入 KubernetesClient 对象,然后在该 Bean 中实现对 Kubernetes 资源的操作。例如: ```java @Component public class KubernetesService { @Autowired private KubernetesClient kubernetesClient; public void createDeployment(Deployment deployment) { kubernetesClient.apps().deployments().inNamespace("default").create(deployment); } public void deleteDeployment(String name) { kubernetesClient.apps().deployments().inNamespace("default").withName(name).delete(); } } ``` 在上面的代码中,KubernetesService 是一个自定义的 Spring Bean,其中注入了 KubernetesClient 对象。然后,可以在该 Bean 中实现对 Kubernetes Deployment 的创建和删除操作。 4. 最后,可以在 Spring Boot 应用程序的控制器或其他组件中使用 KubernetesService Bean 中的方法,以实现对 Kubernetes 资源的操作。例如: ```java @RestController public class KubernetesController { @Autowired private KubernetesService kubernetesService; @PostMapping("/deployments") public void createDeployment(@RequestBody Deployment deployment) { kubernetesService.createDeployment(deployment); } @DeleteMapping("/deployments/{name}") public void deleteDeployment(@PathVariable String name) { kubernetesService.deleteDeployment(name); } } ``` 在上面的代码中,KubernetesController 是一个 Spring MVC 控制器,其中注入了 KubernetesService Bean,可以通过该 Bean 中的方法实现对 Kubernetes Deployment 的创建和删除操作。然后,可以通过 Spring MVC 的注解将这些方法映射到 REST API 中,以供外部调用。 通过以上步骤,就可以将 io.fabric8 kubernetes-client 集成到 Spring Boot 应用程序中,实现对 Kubernetes 资源的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值