[Three] Kubernetes Kubernetes learning distributed cluster architecture

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:

Guess you like

Origin www.cnblogs.com/cac2020/p/11484884.html