k8s的endpoints、service、ReplicationController、名称空间。
ndpoints是指一个服务的端点,当你的服务需要访问外部资源时,而你又不想把外部地址配置到代码里,这时,你可以在k8s里建立一个kind为Endpoints的服务,它可以帮助你的程序解析这个外部地址。格式。
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]#
更多推荐
所有评论(0)