k8s总结(四)kubectl应用实例
一、kubectl进行nginx应用测试
这里使用的minikube环境进行测试,可以使用官方版,国内的话可以使用aliyun修改版(https://yq.aliyun.com/articles/221687)
1[root@ecs-255b ~]# cat nginx/deployment.yaml
2apiVersion: apps/v1
3kind: Deployment
4metadata:
5 name: nginx-deployment
6spec:
7 selector:
8 matchLabels:
9 app: nginx
10 replicas: 2 # tells deployment to run 2 pods matching the template
11 template:
12 metadata:
13 labels:
14 app: nginx
15 spec:
16 containers:
17 - name: nginx
18 image: nginx:1.14.2
19 ports:
20 - containerPort: 80
使用如下命令可以创建deployment容器应用
1kubectl apply -f nginx/deployment.yaml
注:该yaml文件也可以是远程网络上的一个文件。
此时修改文件中的replicas 数量为4,再次重启apply ,并开另一个窗口,可以查看到pod的变化会逐步由2变为4
1[root@ecs-255b ~]# kubectl get deployments nginx-deployment --watch
接下来再对nginx的版本进行升级:
1[root@ecs-255b ~]# cat nginx/deployment-update.yaml
2apiVersion: apps/v1
3kind: Deployment
4metadata:
5 name: nginx-deployment
6spec:
7 selector:
8 matchLabels:
9 app: nginx
10 replicas: 2
11 template:
12 metadata:
13 labels:
14 app: nginx
15 spec:
16 containers:
17 - name: nginx
18 image: nginx:1.16.1 # Update the version of nginx from 1.14.2 to 1.16.1
19 ports:
20 - containerPort: 80
再次使用kubectl apply应用后,可以通过如下命令查看其版本信息,会发现其版本已经由之前的版本升级成新的版本。
1[root@ecs-255b ~]# kubectl describe deployments nginx-deployment
二、完整示例
在概念篇里我们有学到k8s有namespace label deployment service pod,这里从namespace开始做一个完整的实验。
1、Namespace在很多情况下用于实现多用户的资源隔离,通过将集群内部的资源对象分配到不同的Namespace中,形成逻辑上的分组,便于不同的分组在共享使用整个集群的资源同时还能被分别管理。
1//通过命令创建
2[root@ecs-255b ~]# kubectl create namespace test
3namespace/test created
4//通过yaml文件创建
5[root@ecs-255b ~]# cat test.yaml //创建创建文件
6apiVersion: v1
7kind: Namespace
8metadata:
9 name: test
10[root@ecs-255b ~]# kubectl create -f test.yaml
11[root@ecs-255b ~]# kubectl get ns //查看namespace
12[root@ecs-255b ~]# kubectl replace --force -f test.yaml //重建
13namespace test deleted
14namespace/test replaced
15[root@ecs-255b ~]# kubectl delete namespaces test //删除
16namespace test deleted
2、Label是Kubernetes系统中另一个核心概念。一个Label是一个key=value的键值对,其中key与value由用户自己指定。在k8s基本概念篇中我们也总结过,label可以设置ns、Node、Pod、Service、RC等。
1//设置label
2[root@ecs-255b ~]# kubectl label namespaces test colour=green
3namespace/test labeled
4[root@ecs-255b ~]# kubectl get namespaces test --show-labels
5NAME STATUS AGE LABELS
6test Active 9m48s colour=green,kubernetes.io/metadata.name=test
7//修改label
8[root@ecs-255b ~]# kubectl label namespaces test colour=red --overwrite
9namespace/test labeled
10[root@ecs-255b ~]# kubectl get namespaces test --show-labels
11NAME STATUS AGE LABELS
12test Active 10m colour=red,kubernetes.io/metadata.name=test
13//删除label
14[root@ecs-255b ~]# kubectl label namespaces test colour-
15namespace/test labeled
3、Deployment是Kubenetes v1.2引入的新概念,引入的目的是为了更好的解决Pod的编排问题,Deployment内部使用了Replica Set来实现。Deployment的定义与ReplicaSet的定义很类似,除了API声明与Kind类型有所区别。deployment的定义类似如下:
1## Deployment
2apiVersion: apps/v1
3kind: Deployment
4metadata:
5 name: mysql
6 labels:
7 app: mysql
8spec:
9 replicas: 1
10 selector:
11 matchLabels:
12 app: mysql
13 template:
14 metadata:
15 labels:
16 app: mysql
17 spec:
18 containers:
19 - name: mysql
20 image: mysql:8.0.19
21 ports:
22 - containerPort: 3306
23 env:
24 - name: MYSQL_ROOT_PASSWORD ## 配置Root用户默认密码
25 value: 123456
26 resources:
27 limits:
28 cpu: 2000m
29 memory: 512Mi
30 requests:
31 cpu: 2000m
32 memory: 512Mi
应用指令如下:
1[root@361way ~]# kubectl create -f mysql.yaml //创建deployment
2deployment.apps/mysql-deployment created
3[root@361way ~]# kubectl delete deployment mysql-deployment -n elk //删除
4deployment.apps mysql-deployment deleted
5[root@361way ~]# kubectl replace --force -f mysql.yaml //重建
6deployment.apps mysql-deployment deleted
7deployment.apps/mysql-deployment replaced
8[root@361way ~]# kubectl get deployment -n elk //查看
9NAME READY UP-TO-DATE AVAILABLE AGE
10elk 1/1 1 1 21h
11[root@361way ~]# kubectl get deployments --all-namespaces //查看所有
12NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
13default nginx 1/1 1 1 10d
14mysql mysql 1/1 1 1 21h
15kube-system coredns 2/2 2 2 11d
4、Service是Kubernetes最核心概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。
1[root@361way ~]# kubectl create -f mysql-service.yaml //创建
2service/mysql created
3[root@361way ~]# kubectl replace --force -f mysql-service.yaml //重建
4service/mysql replaced
5[root@361way ~]# kubectl get svc -n elk //查看
6NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
7nginx ClusterIP 10.1.40.47 80/TCP 21h
8mysql NodePort 10.1.7.179 3306:3306/TCP 21h
9[root@361way ~]# kubectl delete svc mysql-service -n mysql //删除
10service mysql-service deleted
5、Pod是Kubernetes的最重要概念,每一个Pod都有一个特殊的被称为”根容器“的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器。
1# kubectl create -f ./pod.json //通过pod.json文件创建一个pod。
2# kubectl delete -f ./pod.json //使用 pod.json中指定的资源类型和名称删除pod。
3# kubectl delete pod,service test //删除名为test的Pod和Service。
4# kubectl delete pods,svc -l name=tank //删除 Label name=tank的pod和Service。
5# kubectl delete pod foo --grace-period=0 --force //强制删除dead node上的pod
6# kubectl delete pods --all //删除所有pod
7//通过设置replicas来删除pod
8[root@361way mysql]# kubectl scale --replicas=0 -f mysql-rc.yaml
9replicationcontroller/mysql scaled
10[root@361way mysql]# kubectl get pod
11NAME READY STATUS RESTARTS AGE
12mysql-cd7tm 1/1 Terminating 0 57s
13nginx-f89759699-545w5 1/1 Running 0 10d
14[root@361way mysql]# kubectl get pod
15NAME READY STATUS RESTARTS AGE
16nginx-f89759699-545w5 1/1 Running 0 10d
17# kubectl replace -f ./pod.json //通过pod.json文件重建pod
18# kubectl replace --force -f ./pod.json //通过pod.json文件强制重建
19//查看所有pod,svc
20[root@361way ~]# kubectl get pod,svc --all-namespaces
21NAMESPACE NAME READY STATUS RESTARTS AGE
22default pod/nginx-f89759699-545w5 1/1 Running 0 11d
23mysql pod/mysql-ddc4c865b-859ks 1/1 Running 0 22h
24kube-system pod/coredns-7ff77c879f-bxgtr 1/1 Running 2 11d
25……
26NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
27default service/kubernetes ClusterIP 10.1.0.1 443/TCP 11d
28default service/nginx ClusterIP 10.1.40.47 80/TCP 21h
29mysql service/mysql NodePort 10.1.7.179 3306:3306/TCP 22h
30……
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/k8s-ns-label-service/6632.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.