K8s API
Kubernetes 的 kubectl 也就是 command tool,Kubernetes UI,或者有时候用 curl,直接与 Kubernetes 进行沟通,都是使用 HTTP + JSON 这种形式。
EG:
对于这个 Pod 类型的资源,它的 HTTP 访问的路径就是 API,然后是 apiVesion: V1, 之后是相应的 Namespaces,以及 Pods 资源,最终是 Podname,也就是 Pod 的名字。
POD配置解析
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