svc:相當(dāng)于負(fù)載均衡器,將請求分發(fā)給pod。
1.創(chuàng)建服務(wù),例如mysql+wordpress
1.1創(chuàng)建pv,pvc
#創(chuàng)建pv,pvc 詳細(xì)查看:http://m.itdecent.cn/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.創(chuàng)建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.創(chuàng)建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.創(chuàng)建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.創(chuàng)建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
發(fā)現(xiàn)服務(wù)
#變量的方式發(fā)現(xiàn)。
#1.只能獲取相同namespace里的變量
#2.變量的獲取有先后順序,引用的變量必須要先創(chuàng)建,
#例如wordpress引用mysql的MYSQL_SERVICE_HOST,則必須先創(chuàng)建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的方式發(fā)現(xiàn)
#在kube-system里有dns,可以自動發(fā)現(xiàn)所有命名空間里的服務(wù)的clusterIP,
#所以在同一個命名空間里,一個服務(wù)訪問另外一個服務(wù)的時候,可以直接通過服務(wù)名來訪問
#只要創(chuàng)建了一個服務(wù)(不管在哪個ns里創(chuàng)建的),都會自動向kube-system里的DNS注冊
#如果是不同的命名空間,可以通過 服務(wù)名.命名空間名 來訪問
kubectl run busybox --rm -it --image=busybox sh
發(fā)布服務(wù):指讓集群之外的主機(jī)能訪問服務(wù)
可以通過以下方式訪問
| 名稱 | 作用 |
|---|---|
| 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