Andy's Blog Missing My Rainbow

11.k8s 入门例子(kubernetes权威指南 第四版)

前提准备

  • 准备三台机器,并搭建好K8S集群
主机名 IP 内存
k8s-master 192.168.43.20 2G
k8s-node1 192.168.43.21 2G
k8s-node2 192.168.43.22 2G
  • 准备4个yaml文件,分别是mysql-rc.yaml,mysql-svc.yaml,myweb-rc.yaml,myweb-svc.yaml
  1. mysql-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"

注意:image: mysql:5.7 我增加了mysql镜像的版本号,因为书是2019年出版,当时最新的镜像就是5+版本的,但是现在我们使用就会报错,当然这只是解决该问题的其中一个方法

我们可以认为template:上面的内容为控制器对象,下面的内容为被控制的对象

image

  1. mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
    - port: 3306
  selector:
    app: mysql

管理对象RC和Service通过selector用label进行关联

  1. myweb-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
spec:
  replicas: 5
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: kubeguide/tomcat-app:v1
        ports:
        - containerPort: 8080
        env:
        - name: MYSQL_SERVICE_HOST
          value: 'mysql'
        - name: MYSQL_SERVICE_PORT
          value: '3306'

  1. myweb-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30001
  selector:
    app: myweb

执行命令

kubectl create -f mysql-rc.yaml
kubectl create -f mysql-svc.yaml
kubectl create -f myweb-rc.yaml
kubectl create -f myweb-svc.yaml

测试页面

image

每个kubectl create 命令都涉及到master节点选取执行Node,和拉取镜像操作,所以会比较耗时,需要执行完命令等待一段时间

查看命令

  • 查看所有的node节点信息
[root@k8s-master chapter1]# kubectl get nodes -o wide
NAME         STATUS   ROLES    AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
k8s-master   Ready    master   7d6h   v1.18.0   192.168.43.20   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   docker://18.6.1
k8s-node1    Ready    <none>   7d6h   v1.18.0   192.168.43.21   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   docker://18.6.1
k8s-node2    Ready    <none>   7d6h   v1.18.0   192.168.43.22   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   docker://18.6.1
[root@k8s-master chapter1]#
  • 查看所有的pod信息
[root@k8s-master chapter1]# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
mysql-sxwpx             1/1     Running   1          24m     10.244.1.12   k8s-node1   <none>           <none>
myweb-9xmz9             1/1     Running   0          7m24s   10.244.2.4    k8s-node2   <none>           <none>
myweb-pz8wp             1/1     Running   0          7m24s   10.244.1.16   k8s-node1   <none>           <none>
myweb-qtrws             1/1     Running   0          7m24s   10.244.2.3    k8s-node2   <none>           <none>
myweb-tkzm5             1/1     Running   0          7m24s   10.244.2.5    k8s-node2   <none>           <none>
myweb-xrw9v             1/1     Running   0          7m24s   10.244.2.2    k8s-node2   <none>           <none>
nginx-f89759699-6v4c6   1/1     Running   3          7d6h    10.244.1.13   k8s-node1   <none>           <none>
[root@k8s-master chapter1]#
  • 查看所有的服务信息
[root@k8s-master chapter1]# kubectl get svc -o wide
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE    SELECTOR
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          7d7h   <none>
mysql        ClusterIP   10.105.204.78   <none>        3306/TCP         15m    app=mysql
myweb        NodePort    10.110.6.17     <none>        8080:30001/TCP   5m9s   app=myweb
nginx        NodePort    10.111.0.63     <none>        80:30152/TCP     7d6h   app=nginx
[root@k8s-master chapter1]#
  • 查看所有的Replication Controllers信息
[root@k8s-master chapter1]# kubectl get rc -o wide
NAME    DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                    SELECTOR
mysql   1         1         1       28m   mysql        mysql:5.7                 app=mysql
myweb   5         5         5       15m   myweb        kubeguide/tomcat-app:v1   app=myweb
[root@k8s-master chapter1]#
  • 查看所有的deployment信息
[root@k8s-master chapter1]# kubectl get deployment -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES   SELECTOR
nginx   1/1     1            1           7d6h   nginx        nginx    app=nginx
[root@k8s-master chapter1]#

  • 查看所有的endpoints信息
[root@k8s-master chapter1]# kubectl get endpoints
NAME         ENDPOINTS                                                      AGE
kubernetes   192.168.43.20:6443                                             7d7h
mysql        10.244.1.12:3306                                               10m
myweb        10.244.1.16:8080,10.244.2.2:8080,10.244.2.3:8080 + 2 more...   7m48s
nginx        10.244.1.13:80                                                 7d6h
[root@k8s-master chapter1]# 
  • 查看某个pod的详细信息
[root@k8s-master ~]# kubectl describe pod myweb-pz8wp
Name:         myweb-pz8wp
Namespace:    default
Priority:     0
Node:         k8s-node1/192.168.43.21
Start Time:   Thu, 08 Apr 2021 21:19:39 +0800
Labels:       app=myweb
Annotations:  <none>
Status:       Running
IP:           10.244.1.16
IPs:
  IP:           10.244.1.16
Controlled By:  ReplicationController/myweb
Containers:
  myweb:
    Container ID:   docker://54ab95bea62fec7cec72116c3b286cd30ce64a212779914c260dde361c9bc067
    Image:          kubeguide/tomcat-app:v1
    Image ID:       docker-pullable://kubeguide/tomcat-app@sha256:7a9193c2e5c6c74b4ad49a8abbf75373d4ab76c8f8db87672dc526b96ac69ac4
    Port:           8080/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 08 Apr 2021 21:19:40 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      MYSQL_SERVICE_HOST:  mysql
      MYSQL_SERVICE_PORT:  3306
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-kh4gl (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-kh4gl:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-kh4gl
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>
[root@k8s-master ~]#
  • 修改RC副本的数量
[root@k8s-master ~]# kubectl get rc -o wide
NAME    DESIRED   CURRENT   READY   AGE    CONTAINERS   IMAGES                    SELECTOR
mysql   1         1         1       135m   mysql        mysql:5.7                 app=mysql
myweb   5         5         5       122m   myweb        kubeguide/tomcat-app:v1   app=myweb
[root@k8s-master ~]# 
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE    IP            NODE        NOMINATED NODE   READINESS GATES
mysql-sxwpx             1/1     Running   1          133m   10.244.1.12   k8s-node1   <none>           <none>
myweb-9xmz9             1/1     Running   0          116m   10.244.2.4    k8s-node2   <none>           <none>
myweb-pz8wp             1/1     Running   0          116m   10.244.1.16   k8s-node1   <none>           <none>
myweb-qtrws             1/1     Running   0          116m   10.244.2.3    k8s-node2   <none>           <none>
myweb-tkzm5             1/1     Running   0          116m   10.244.2.5    k8s-node2   <none>           <none>
myweb-xrw9v             1/1     Running   0          116m   10.244.2.2    k8s-node2   <none>           <none>
nginx-f89759699-6v4c6   1/1     Running   3          7d8h   10.244.1.13   k8s-node1   <none>           <none>
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl scale rc myweb --replicas=3
replicationcontroller/myweb scaled
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE    IP            NODE        NOMINATED NODE   READINESS GATES
mysql-sxwpx             1/1     Running   1          133m   10.244.1.12   k8s-node1   <none>           <none>
myweb-pz8wp             1/1     Running   0          117m   10.244.1.16   k8s-node1   <none>           <none>
myweb-qtrws             1/1     Running   0          117m   10.244.2.3    k8s-node2   <none>           <none>
myweb-xrw9v             1/1     Running   0          117m   10.244.2.2    k8s-node2   <none>           <none>
nginx-f89759699-6v4c6   1/1     Running   3          7d8h   10.244.1.13   k8s-node1   <none>           <none>
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl get rc -o wide
NAME    DESIRED   CURRENT   READY   AGE    CONTAINERS   IMAGES                    SELECTOR
mysql   1         1         1       137m   mysql        mysql:5.7                 app=mysql
myweb   3         3         3       124m   myweb        kubeguide/tomcat-app:v1   app=myweb
[root@k8s-master ~]#
posted @ 2021-04-08 21:34  y-blog  阅读(417)  评论(2)    收藏  举报