云原生5 走进容器编排平台 - K8s API与简单Demo

314 阅读2分钟

K8s API
Kubernetes 的 kubectl 也就是 command tool,Kubernetes UI,或者有时候用 curl,直接与 Kubernetes 进行沟通,都是使用 HTTP + JSON 这种形式。

EG:
对于这个 Pod 类型的资源,它的 HTTP 访问的路径就是 API,然后是 apiVesion: V1, 之后是相应的 Namespaces,以及 Pods 资源,最终是 Podname,也就是 Pod 的名字。

image.png

POD配置解析

Image.png

version
API 的 version,它会描述我在操作哪个资源
kind
类型,可以是pod depolyment等
metadata
如果 kind 如果是 pod,在 Metadata 中,就写上这个 Pod 的名字;比如说 nginx,我们也会给它打一些 label,在 Metadata 中,有时候也会去写 annotation,也就是对资源的额外的一些用户层次的描述。
spec
spec 也就是我们希望 Pod 达到的一个预期的状态。比如说它内部需要有哪些 container 被运行;比如说这里面有一个 nginx 的 container,它的 image 是什么?它暴露的 port 是什么? 一般来讲在 Spec 下面会有一个项目叫 status,它表达了这个资源当前的状态;比如说一个 Pod 的状态可能是正在被调度、或者是已经 running、或者是已经被 terminates,就是被执行完毕了。
label
label 可以是一组 KeyValuePair(颜色,大小等特征描述)。 label 是可以被 selector,也就是选择器所查询的: select color = red 通过 label,kubernetes 的 API 层就可以对这些资源进行一个筛选,那这些筛选也是 kubernetes 对资源的集合所表达默认的一种方式,比如Service对应的一组Pod。

K8s Demo
安装docker环境和minikube
(19条消息) 阿里云CentOS 7 安装部署 minikube且外网能访问dashboard_LPH_1014的博客-CSDN博客

启动minikube之前需要将普通用户加入docker group

[root@yz117 bin]# usermod -aG docker yz72053 
[root@yz117 bin]# su - yz72053
minikube start --driver=docker

查看minikube状态

[yz72053@yz117 chrome]$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

[yz72053@yz117 chrome]$ kubectl get nodes
NAME       STATUS   ROLES    AGE    VERSION
minikube   Ready    master   115m   v1.19.0
[yz72053@yz117 chrome]$ kubectl get deployments
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   0/4     3            0           97s

1.创建一个deployment - 1.7.9

[yz72053@yz117 chrome]$ kubectl apply  -f  https://k8s.io/examples/application/deployment.yaml
deployment.apps/nginx-deployment created

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

2.更新版本

[yz72053@yz117 chrome]$ kubectl apply -f  https://k8s.io/examples/application/deployment-update.yaml
deployment.apps/nginx-deployment configured

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1 # Update the version of nginx from 1.14.2 to 1.16.1
        ports:
        - containerPort: 80

[root@yz117 ~]# kubectl describe deployment nginx-deployment
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[root@yz117 ~]# su yz72053

3.水平扩容

[yz72053@yz117 chrome]$ kubectl apply -f  https://k8s.io/examples/application/deployment-scale.yaml
deployment.apps/nginx-deployment configured

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 4 # Update the replicas from 2 to 4
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

[yz72053@yz117 root]$ kubectl describe deployment nginx-deployment
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Tue, 15 Mar 2022 17:31:42 +0800
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 3
Selector:               app=nginx
Replicas:               4 desired | 3 updated | 5 total | 0 available | 5 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.14.2
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      False   MinimumReplicasUnavailable
  Progressing    True    ReplicaSetUpdated
OldReplicaSets:  nginx-deployment-559d658b74 (2/2 replicas created)
NewReplicaSet:   nginx-deployment-66b6c48dd5 (3/3 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  6m16s  deployment-controller  Scaled up replica set nginx-deployment-66b6c48dd5 to 2
  Normal  ScalingReplicaSet  6m3s   deployment-controller  Scaled up replica set nginx-deployment-559d658b74 to 1
  Normal  ScalingReplicaSet  5m53s  deployment-controller  Scaled up replica set nginx-deployment-66b6c48dd5 to 3
  Normal  ScalingReplicaSet  5m53s  deployment-controller  Scaled up replica set nginx-deployment-559d658b74 to 2

4.删除deployment

[yz72053@yz117 root]$ kubectl delete deployment nginx-deployment deployment.apps "nginx-deployment" deleted