Kubernetes Service服务配置
2019-04-17 本文已影响2人
条子在洗澡
svc:相当于负载均衡器,将请求分发给pod。
1.创建服务,例如mysql+wordpress
1.1创建pv,pvc
#创建pv,pvc 详细查看:https://www.jianshu.com/p/a74910c84398
[root@k8s-master1 service]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv0001 5Gi RWO Recycle Bound default/dbclaim 54s
pv0002 3Gi RWO Recycle Bound default/blogclaim 9s
[root@k8s-master1 service]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
blogclaim Bound pv0002 3Gi RWO 9s
dbclaim Bound pv0001 5Gi RWO 24s
1.2.创建mysql pod
apiVersion: v1
kind: Pod
metadata:
name: mysql
labels:
name: mysql
spec:
containers:
- image: hub.c.163.com/library/mysql:latest
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: redhat
- name: MYSQL_USER
value: tom
- name: MYSQL_PASSWORD
value: redhat
- name: MYSQL_DATABASE
value: blog
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql/data
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: dbclaim
1.3.创建wordpress pod
#172.30.255.198 地址为mysql的svc地址
apiVersion: v1
kind: Pod
metadata:
name: wordpress
labels:
name: wordpress
spec:
containers:
- image: hub.c.163.com/library/wordpress:latest
name: wordpress
env:
- name: WORDPRESS_DB_USER
value: root
- name: WORDPRESS_DB_PASSWORD
value: redhat
- name: WORDPRESS_DB_NAME
value: blog
- name: WORDPRESS_DB_HOST
# this is the name of the mysql service fronting the mysql pod in the same namespace
# expands to mysql.<namespace>.svc.cluster.local - where <namespace> is the current namespace
value: 172.30.255.198
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: dbclaim
1.4.创建mysql service
apiVersion: v1
kind: Service
metadata:
labels:
name: mysql
name: mysql
spec:
ports:
# the port that this service should serve on
- port: 3306
# label keys and values that must match in order to receive traffic for this service
selector:
name: mysql
1.5.创建wordpres service
apiVersion: v1
kind: Service
metadata:
labels:
name: wpfrontend
name: wpfrontend
spec:
ports:
# the port that this service should serve on
- port: 5055
targetPort: 80
# label keys and values that must match in order to receive traffic for this service
selector:
name: wordpress
type: LoadBalancer
发现服务
#变量的方式发现。
#1.只能获取相同namespace里的变量
#2.变量的获取有先后顺序,引用的变量必须要先创建,
#例如wordpress引用mysql的MYSQL_SERVICE_HOST,则必须先创建mysql,生成变量MYSQL_SERVICE_HOST
env:
- name: WORDPRESS_DB_USER
value: root
- name: WORDPRESS_DB_PASSWORD
value: redhat
- name: WORDPRESS_DB_NAME
value: blog
- name: WORDPRESS_DB_HOST
value: $(MYSQL_SERVICE_HOST)
#DNS的方式发现
#在kube-system里有dns,可以自动发现所有命名空间里的服务的clusterIP,
#所以在同一个命名空间里,一个服务访问另外一个服务的时候,可以直接通过服务名来访问
#只要创建了一个服务(不管在哪个ns里创建的),都会自动向kube-system里的DNS注册
#如果是不同的命名空间,可以通过 服务名.命名空间名 来访问
kubectl run busybox --rm -it --image=busybox sh
发布服务:指让集群之外的主机能访问服务
可以通过以下方式访问
名称 | 作用 |
---|---|
NodePort | 其他 |
LoadBalancer | 其他 |
ExternalName | 其他 |
ClusterIP | 其他 |
ingress | 其他 |
ingress外部访问
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress- controller:0.21.0
wget https://raw.githubusercontent.com/kubernetes/ingress- nginx/master/deploy/mandatory.yaml
kubectl expose deployment nginx-ingress-controller --name=ingress-nginx --type=NodePort