Environmental
centos 7
A, Kubernetes distributed cluster architecture
1, Kubernetes service registration and service discovery problem how to solve?
Each service is assigned a constant virtual IP + port, the system environment variable env each service has a service name-to-IP mapping.
2, Load Balancing service how to solve?
We have a software-implemented service agent to achieve load balancing on each node
3, large-scale deployment of service how to solve?
Object-oriented approach: determining the number of deployed instances, automatic scheduling system
4, operation and maintenance services how to solve the problem?
Automatic monitoring, self-healing
5, centralized configuration, real-time configuration and implementation to take effect
Second, the cluster architecture Example
1, an example of
a message board PHP to do: do 3 sets webserver PHP-Frontend reception, 1 redis-master used to write, 2 redis-slave do read.
2, set up a cluster diagram
creates three service: frontend Service, redis-master Service, redis-slave Service
Third, build
1, create a Master-Pod Redis
(1) the definition of redis-master-controller.yaml file:
[root@node106 ~]# vi redis-master-controller.yaml apiVersion: v1 kind: ReplicationController metadata: name: redis-master labels: name: redis-master spec: replicas: 1 selector: name: redis-master template: metadata: labels: name: redis-master spec: containers: - name: master image: kubeguide/redis-master ports: - containerPort: 6379
(2) creating a command execution
[root@node106 ~]# kubectl create -f redis-master-controller.yaml
replicationcontroller/redis-master created
(3) View pod
[root@node106 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE redis-master-659bm 1/1 Running 0 4m46s
2. Create redis-master service
(1) Definition redis-master-service.yaml
[root@node106 ~]# vi redis-master-service.yaml apiVersion: v1 kind: Service metadata: name: redis-master labels: name: redis-master spec: ports: - port: 6379 targetPort: 6379 selector: name: redis-master
(2) creating a command execution
[root@node106 ~]# kubectl create -f redis-master-service.yaml
service/redis-master created
(3) Check service
[root@node106 ~]# kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 46h redis-master ClusterIP 10.96.187.196 <none> 6379/TCP 18s
3. Create redis-slave Pod
(1) Create a redis-slave-controller.yaml
[root@node106 ~]# vi redis-slave-controller.yaml apiVersion: v1 kind: ReplicationController metadata: name: redis-slave labels: name: redis-slave spec: replicas: 2 selector: name: redis-slave template: metadata: labels: name: redis-slave spec: containers: - name: slave image: kubeguide/guestbook-redis-slave env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 6379
(2) creating a command execution
[root@node106 ~]# kubectl create -f redis-slave-controller.yaml
replicationcontroller/redis-slave created
(3) View pod and rc
[root@node106 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE redis-master-659bm 1/1 Running 0 16m redis-slave-kqllg 1/1 Running 0 119s redis-slave-rfbr8 1/1 Running 0 119s [root@node106 ~]# kubectl get rc NAME DESIRED CURRENT READY AGE redis-master 1 1 1 17m redis-slave 2 2 2 2m24s
4, create redis-slave service
(1) Create a redis-slave-service.yaml
[root@node106 ~]# vi redis-slave-service.yaml apiVersion: v1 kind: Service metadata: name: redis-slave labels: name: redis-slave spec: ports: - port: 6379 selector: name: redis-slave
(2) creating a command execution
[root@node106 ~]# kubectl create -f redis-slave-service.yaml
service/redis-slave created
(3) Check service
[root@node106 ~]# kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 46h redis-master ClusterIP 10.96.187.196 <none> 6379/TCP 11m redis-slave ClusterIP 10.99.146.233 <none> 6379/TCP 33s
5, create frontend Pod
(1) Create a frontend-controller.yaml
[root@node106 ~]# vi frontend-controller.yaml apiVersion: v1 kind: ReplicationController metadata: name: frontend labels: name: frontend spec: replicas: 3 selector: name: frontend template: metadata: labels: name: frontend spec: containers: - name: frontend image: kubeguide/guestbook-php-frontend env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 80
(2) creating a command execution
[root@node106 ~]# kubectl create -f frontend-controller.yaml
replicationcontroller/frontend created
(3) View pod
[root@node106 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE curl-6bf6db5c4f-dn65h 1/1 Running 2 41h frontend-jjpzd 1/1 Running 0 6m50s frontend-p2jpn 1/1 Running 0 6m50s frontend-rm4z4 1/1 Running 0 6m50s redis-master-659bm 1/1 Running 0 30m redis-slave-kqllg 1/1 Running 0 15m redis-slave-rfbr8 1/1 Running 0 15m
6, create frontend service
(1) Create a frontend-service.yaml
[root@node106 ~]# vi frontend-service.yaml apiVersion: v1 kind: Service metadata: name: frontend labels: name: frontend spec: type: NodePort ports: - port: 80 nodePort: 30001 selector: name: frontend
(2) creating a command execution
[root@node106 ~]# kubectl create -f frontend-service.yaml
service/frontend created
(3) Check service
[root@node106 ~]# kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend NodePort 10.110.39.201 <none> 80:30001/TCP 34s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 46h redis-master ClusterIP 10.96.187.196 <none> 6379/TCP 24m redis-slave ClusterIP 10.99.146.233 <none> 6379/TCP 13m
verification: