1.endpoints

ndpoints是指一个服务的端点,当你的服务需要访问外部资源时,而你又不想把外部地址配置到代码里,这时,你可以在k8s里建立一个kind为Endpoints的服务,它可以帮助你的程序解析这个外部地址。

格式

[root@master101 endpoints]# cat 01-ep.yaml
apiVersion: v1
kind: Endpoints
metadata:
  name: ep-es
# 配置endpoints后端的IP地址及端口
subsets:
  # 配置IP地址
- addresses:
  - ip: 10.0.0.101
  - ip: 10.0.0.102
  - ip: 10.0.0.103
  # 配置端口
  ports:
  - port: 9200
    name: http
  - port: 9300
    name: tcp
[root@master101 ~]# kubectl get ep
NAME                      ENDPOINTS                                                     AGE
kubernetes                10.0.0.231:6443                                               23h
ep-es-cluster   10.0.0.101:9200,10.0.0.102:9200,10.0.0.103:9200 + 3 more...   22s
svc-db                    10.100.1.123:3306                                             23h
svc-wp                    10.100.1.124:80,10.100.1.125:80,10.100.2.89:80                23h
[root@master101 ~]# kubectl describe ep ep-es-cluster 
Name:         ep-es-cluster
Namespace:    default
Labels:       <none>
Annotations:  <none>
Subsets:
  Addresses:          10.0.0.101,10.0.0.102,10.0.0.103
  NotReadyAddresses:  <none>
  Ports:
    Name  Port  Protocol
    ----  ----  --------
    http  9200  TCP
    tcp   9300  TCP

Events:  <none>
[root@master101 ~]# 

远程连接案例

1.在K8S外部部署MySQL服务
[root@harbor100 ~]#  docker run -e MYSQL_ROOT_PASSWORD=123456 -d --name tomcat-db --network host --restart always mysql:5.7


	2.编写资源清单
[root@master101 ]# cat 01-ep-mysql57.yaml 
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-ep
subsets:
- addresses:
  - ip: 10.0.0.250
  # 配置端口
  ports:
  - port: 3306
    name: mysql-ep
[root@master101]# 
[root@master101]# cat 02-svc-mysql57.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mysql-ep
spec:
  type: ClusterIP
  ports:
  - port: 3306
    name: mysql-ep
[root@master101 ]# cat 03-deploy-tomcat.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: oldboyedu-tomcat-app
spec:
  replicas: 1
  selector:
    matchExpressions:
    - key: app
      operator: Exists
  template:
    metadata:
      labels:
        app: tomcat-app
    spec:
      containers:
        - name: tomcat
          image: harbor.www.com/www-tomcat/tomcat-app:v1
          ports:
          - containerPort: 8080
          env:
          - name: MYSQL_SERVICE_HOST
            value: mysql-ep
          - name: MYSQL_SERVICE_PORT
            value: '3306'
[root@master101]# cat 04-svc-tomcat.yaml 
apiVersion: v1
kind: Service
metadata:
  name: tomcat-app
spec:
  type: NodePort
  selector:
     app: tomcat-app
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 8080
[root@master101]# 

2.service

service主要解决Pod的动态变化,提供统一的访问入口。

service有以下两个作用:
    (1) 基于标签管理器关联后端的Pod列表,通过标签去关联一组Pod,以实现服务发现的功能;
    (2)将用户请求转发给不同的Pod以均衡流量,基于iptables或者ipvs实现负载均衡的功能;
    
service类型:
ClusterIP
        用于内部服务基于service名称的访问,这需要依赖于coreDns组件是正常工作的。
NodePort
        用于Kubernetes集群以外的服务主动访问运行在Kubernetes集群内部的服务。

LoadBalance:
        用于公有云环境的服务暴露。

ExternalName:
        用于将K8S集群外部的服务映射至K8S集群内部访问,让集群内部的Pod能够通过固定的service名称访问集群外部的服务。  有时候也用于将不同namespace之间的pod通过ExternalName进行访问。
 

格式

[root@master101 svc]# cat 01-svc-ClusterIP.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  # 基于标签选择器关联Pod
  selector:
    apps: web
  # 配置端口映射
  ports:
    # 指定Service服务本身的端口号
  - port: 8888
    # 后端Pod提供服务的端口号
    targetPort: 80
    # 默认端口范围是"30000-32767",官方规则,如果想要修改该范围,需要修改api-server启动时的参数.
    nodePort: 8080

[root@master101 svc]# cat 02-svc-NodePort.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myweb-nodeport
spec:
  # 指定svc的类型为NodePort,也就是在默认的ClusterIP基础之上多监听所有worker节点的端口而已。
  type: NodePort
  # 基于标签选择器关联Pod
  selector:
    apps: web
  # 配置端口映射
  ports:
    # 指定Service服务本身的端口号
  - port: 8888
    # 后端Pod提供服务的端口号
    targetPort: 80
[root@master101 svc]# cat 03-services-LoadBalancer.yaml 
kind: Service
apiVersion: v1
metadata:
  name: svc-loadbalancer
spec:
  1.# 指定service类型为LoadBalancer,注意,一般用于云环境
  type: LoadBalancer
  selector:
     app: web
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30080
[root@master101 svc]# cat 04-svc-ExternalName.yaml 
apiVersion: v1
kind: Service
metadata:
  name: svc-externalname
spec:
  # svc类型
  type: ExternalName
  # 指定外部域名
  externalName: www.baidu.com

3.ReplicationController

ReplicationController是一种Kubernetes资源,可确保它的pod始终保持运行状态。如果pod因任何原因消失,则ReplicationController会注意到缺少了pod并创建替代pod。ReplicationController旨在创建和管理一个pod的多个副本(replicas)。这就是ReplicationController名字的由来。

格式

[root@master101 replicationcontrollers]# cat 01-rc-nginx.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: oldboyedu-rc
spec:
  # 表示运行几个Pod副本数量
  replicas: 7
  # 创建Pod的模板
  template:
    metadata:
      labels:
        apps: web
    spec:
      containers:
      - name: web
        image: harbor.oldboyedu.com/oldboyedu-web/nginx:1.25.1-alpine
[root@master101 replicationcontrollers]# 

案例:使用rc控制器部署3个副本,并使用svc的10.200.100.100:99端口进行服务的访问。

[root@master101]# # 编写资源清单
[root@master101]# cat 01-rc-svc-initContainers.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  # 指定service的IP地址
  clusterIP: 10.200.100.100
  # 基于标签选择器关联Pod
  selector:
    school: svc
  # 配置端口映射
  ports:
    # 指定Service服务本身的端口号
  - port: 99
    # 后端Pod提供服务的端口号
    targetPort: 80

---
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-web
spec:
  replicas: 3
  template:
    metadata:
      labels:
        school: svc
    spec:
      volumes:
      - name: data
        emptyDir: {}
      containers:
      - name: web
        image: harbor.www.com/www-web/nginx:1.25.1-alpine
        volumeMounts:
        - name: data
          mountPath: /usr/share/nginx/html
[root@master101]# 
	
[root@master101]# # 创建资源
[root@master101]# kubectl apply -f 01-rc-svc-initContainers.yaml 
service/myweb created
replicationcontroller/rc-web created
[root@master101]# 

[root@master101]# # 查看资源
[root@master101]# for i in `seq 30`;do curl -s 10.200.100.100:99;done | sort | uniq -c
     12 <h1>worker232 ---> rc-web-txfh8 ---> 10.100.1.73</h1>
      8 <h1>worker233 ---> rc-web-dsznv ---> 10.100.2.92</h1>
     10 <h1>worker233 ---> rc-web-zlvg2 ---> 10.100.2.91</h1>
[root@master101]# 

4.名称空间

Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。在同一个命名空间中,资源名称须保持唯一。但在不同命名空间中,可以存在相同名称的资源,每一个资源只能隶属于一个命名空间,但命名空间本身不能属于另一个命名空间。

1.查看名称空间

[root@master101 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   8d
kube-flannel      Active   8d
kube-node-lease   Active   8d
kube-public       Active   8d
kube-system       Active   8d
[root@master101 ~]# ^C

2.查看默认名称空间下的资源,若不指定,则默认为default

[root@master101 ~]# kubectl get pods
NAME                  READY   STATUS    RESTARTS   AGE
wp-5dd857bc9f-66sfz   1/1     Running   0          6s
wp-5dd857bc9f-jdkwq   1/1     Running   0          6s
wp-5dd857bc9f-ttr8l   1/1     Running   0          6s
[root@master101 ~]#

3.查看指定的default名称空间,如果是default名称空间,一般情况下是不指定的。

[root@master101 ~]# kubectl get pods -n default 
NAME                  READY   STATUS    RESTARTS   AGE
wp-5dd857bc9f-66sfz   1/1     Running   0          93s
wp-5dd857bc9f-jdkwq   1/1     Running   0          93s
wp-5dd857bc9f-ttr8l   1/1     Running   0          93s
[root@master101 ~]#

4.查看其他名称空间

[root@master101 ~]# kubectl get pods -n kube-system 
NAME                                READY   STATUS    RESTARTS        AGE
coredns-6d8c4cb4d-2qlps             1/1     Running   1               8d
coredns-6d8c4cb4d-tc8j4             1/1     Running   1               8d
etcd-master231                      1/1     Running   16 (37h ago)    8d
kube-apiserver-master231            1/1     Running   15 (37h ago)    2d1h
kube-controller-manager-master231   1/1     Running   13 (169m ago)   8d
kube-proxy-f5gl7                    1/1     Running   0               2d1h
kube-proxy-s64g6                    1/1     Running   0               2d1h
kube-proxy-wbbdj                    1/1     Running   3 (37h ago)     2d1h
kube-scheduler-master231            1/1     Running   12 (169m ago)   8d
[root@master101 ~]# kubectl get pods -n kube-flannel 
NAME                    READY   STATUS    RESTARTS      AGE
kube-flannel-ds-576pk   1/1     Running   5 (37h ago)   8d
kube-flannel-ds-b5nqw   1/1     Running   1             8d
kube-flannel-ds-k8cgd   1/1     Running   0             8d
[root@master101 ~]# ^C

5.创建名称空间:响应式和声明式

[root@master101 ~]# #响应式
[root@master101 ~]# kubectl create namespace www-shuaige
namespace/www-shuaige created
[root@master101 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   8d
kube-flannel      Active   8d
kube-node-lease   Active   8d
kube-public       Active   8d
kube-system       Active   8d
www-shuaige       Active   8s
[root@master101 ~]# 声明式
[root@master101 namespaces]# cat 01-ns-yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: www-ns
  labels:
    school: www
[root@master101 namespaces]# kubectl apply -f 01-ns-yaml 
namespace/www-ns created
[root@master231 namespaces]# kubectl get ns
NAME              STATUS   AGE
default           Active   8d
kube-flannel      Active   8d
kube-node-lease   Active   8d
kube-public       Active   8d
kube-system       Active   8d
www-ns            Active   13s
www-shuaige       Active   3m40s
[root@master101 namespaces]# 

6.使用名称空间

[root@master101 namespaces]# cat 02-ns-games-yaml 
apiVersion: v1
kind: Pod
metadata:
  name: ns-01
  # 将资源加入到指定的名称空间
  namespace: www-ns
spec:
  nodeName: worker233
  containers:
  - name: games
    image: harbor.www.com/www-games/games:v0.5
[root@master101 namespaces]#
[root@master101 namespaces]# ll
total 8
-rw-r--r-- 1 root root  82 Jun 22 22:35 01-ns-yaml
-rw-r--r-- 1 root root 230 Jun 22 22:41 02-ns-games-yaml
[root@master101 namespaces]# kubectl apply -f 02-ns-games-yaml 
pod/ns-01 created
[root@master231 namespaces]# kubectl -n www-ns get po
NAME    READY   STATUS    RESTARTS   AGE
ns-01   1/1     Running   0          38s
[root@master231 namespaces]# 
[root@master231 namespaces]# 

7.删除名称空间,删除了一个名称空间,则该名称空间下的所有资源都会被随时删除。

[root@master101 namespaces]# kubectl -n www-ns get po
NAME    READY   STATUS    RESTARTS   AGE
ns-01   1/1     Running   0          6m23s
[root@master101 namespaces]# kubectl delete ns www-ns 
namespace "www-ns" deleted
[root@master231 namespaces]# kubectl -n www-ns get po
No resources found in www-ns namespace.
[root@master101 namespaces]# 

8.查看所有名称空间的pod,cm,svc资源

[root@master101 namespaces]# 默认default
[root@master101 namespaces]# kubectl get pods,cm,svc
NAME                      READY   STATUS    RESTARTS   AGE
pod/wp-5dd857bc9f-66sfz   1/1     Running   0          25m
pod/wp-5dd857bc9f-jdkwq   1/1     Running   0          25m
pod/wp-5dd857bc9f-ttr8l   1/1     Running   0          25m

NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      8d
configmap/zhuomo-zuoye       1      4d5h

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)       AGE
service/kubernetes   ClusterIP   10.200.0.1       <none>        443/TCP       98m
service/svc-db       ClusterIP   10.200.100.100   <none>        3306/TCP      26m
service/svc-wp       NodePort    10.200.16.64     <none>        80:8080/TCP   25m
[root@master101 namespaces]# 全部
[root@master101 namespaces]# kubectl get pods,cm,svc -A
NAMESPACE      NAME                                    READY   STATUS    RESTARTS         AGE
default        pod/wp-5dd857bc9f-66sfz                 1/1     Running   0                26m
default        pod/wp-5dd857bc9f-jdkwq                 1/1     Running   0                26m
default        pod/wp-5dd857bc9f-ttr8l                 1/1     Running   0                26m
kube-flannel   pod/kube-flannel-ds-576pk               1/1     Running   5 (37h ago)      8d
kube-flannel   pod/kube-flannel-ds-b5nqw               1/1     Running   1                8d
kube-flannel   pod/kube-flannel-ds-k8cgd               1/1     Running   0                8d
kube-system    pod/coredns-6d8c4cb4d-2qlps             1/1     Running   1                8d
kube-system    pod/coredns-6d8c4cb4d-tc8j4             1/1     Running   1                8d
kube-system    pod/etcd-master231                      1/1     Running   16 (37h ago)     8d
kube-system    pod/kube-apiserver-master231            1/1     Running   15 (37h ago)     2d1h
kube-system    pod/kube-controller-manager-master231   1/1     Running   13 (3h13m ago)   8d
kube-system    pod/kube-proxy-f5gl7                    1/1     Running   0                2d2h
kube-system    pod/kube-proxy-s64g6                    1/1     Running   0                2d2h
kube-system    pod/kube-proxy-wbbdj                    1/1     Running   3 (37h ago)      2d2h
kube-system    pod/kube-scheduler-master231            1/1     Running   12 (3h13m ago)   8d

NAMESPACE         NAME                                           DATA   AGE
default           configmap/kube-root-ca.crt                     1      8d
default           configmap/zhuomo-zuoye                         1      4d5h
kube-flannel      configmap/kube-flannel-cfg                     2      8d
kube-flannel      configmap/kube-root-ca.crt                     1      8d
kube-node-lease   configmap/kube-root-ca.crt                     1      8d
kube-public       configmap/cluster-info                         1      8d
kube-public       configmap/kube-root-ca.crt                     1      8d
kube-system       configmap/coredns                              1      8d
kube-system       configmap/extension-apiserver-authentication   6      8d
kube-system       configmap/kube-proxy                           2      8d
kube-system       configmap/kube-root-ca.crt                     1      8d
kube-system       configmap/kubeadm-config                       1      8d
kube-system       configmap/kubelet-config-1.23                  1      8d
www-shuaige       configmap/kube-root-ca.crt                     1      20m

NAMESPACE     NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.200.0.1       <none>        443/TCP                  99m
default       service/svc-db       ClusterIP   10.200.100.100   <none>        3306/TCP                 26m
default       service/svc-wp       NodePort    10.200.16.64     <none>        80:8080/TCP              26m
kube-system   service/kube-dns     ClusterIP   10.200.0.10      <none>        53/UDP,53/TCP,9153/TCP   8d
[root@master101 namespaces]# 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐