- Namespace
- 查看
- 创建
- 删除
- 配置文件方式
- Pod
- 创建并运行Pod
- 查看Pod
- 访问Pod
- 删除指定Pod
- 配置方式操作
- Label
- 命令方式
- 配置方式
- Deployment
- 命令操作
- 配置操作
- Service
- 创建集群内部可访问的Service
- 创建集群外部也可访问的Service
- 删除Service
- 配置方式
# 1 查看所有的ns 命令:kubectl get ns [root@master ~]# kubectl get ns NAME STATUS AGE default Active 20d kube-node-lease Active 20d kube-public Active 20d kube-system Active 20d # 2 查看指定的ns 命令:kubectl get ns ns名称 [root@master ~]# kubectl get ns kube-system NAME STATUS AGE kube-system Active 20d # 3 指定输出格式 命令:kubectl get ns ns名称 -o 格式参数 # kubernetes支持的格式有很多,比较常见的是wide、json、yaml [root@master ~]# kubectl get ns kube-system -o yaml apiVersion: v1 kind: Namespace metadata: creationTimestamp: "2021-11-30T12:07:17Z" name: kube-system resourceVersion: "8" selflink: /api/v1/namespaces/kube-system uid: 500ba364-475f-4b38-ac87-6694d8e500d9 spec: finalizers: - kubernetes status: phase: Active # 4 查看ns详情 命令:kubectl describe ns ns名称 [root@master ~]# kubectl describe ns kube-system Name: kube-system Labels:创建Annotations: Status: Active # Active 命名空间正在使用中 Terminating 正在删除命名空间 # ResourceQuota针对namespace做的资源限制 # LimitRange针对namespace中的每个组件做的资源限制 No resource quota. No LimitRange resource.
# 创建namespace [root@master ~]# kubectl create ns dev namespace/dev created删除
[root@master ~]# kubectl delete ns dev namespace "dev" deleted配置文件方式
准备一个yaml文件:ns-dev.yaml
apiVersion: v1 kind: Namespace metadata: name: dev
执行对应的创建和删除命令了:
# 创建 [root@master data]# kubectl create -f ns-dev.yaml namespace/dev created # 删除 [root@master data]# kubectl delete -f ns-dev.yaml namespace "dev" deletedPod
查看kubernetes集群中的各个组件Pod
[root@master data]# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-6955765f44-nkm8n 1/1 Running 5 20d coredns-6955765f44-sj6zb 1/1 Running 5 20d etcd-master 1/1 Running 15 20d kube-apiserver-master 1/1 Running 17 20d kube-controller-manager-master 1/1 Running 21 20d kube-flannel-ds-4zld7 1/1 Running 7 19d kube-flannel-ds-96hzv 1/1 Running 2 19d kube-flannel-ds-q9fkv 1/1 Running 9 19d kube-proxy-ggtln 1/1 Running 3 19d kube-proxy-s8rbr 1/1 Running 14 20d kube-proxy-t2vzq 1/1 Running 11 19d kube-scheduler-master 1/1 Running 20 20d创建并运行Pod
kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现的
# 命令格式: kubectl run (pod控制器名称) [参数] # --image 指定Pod的镜像 # --port 指定端口 # --namespace/-n 指定namespace [root@master data]# kubectl run nginx-dev --image=nginx:latest --port=80 --namespace dev deployment.apps/nginx-dev created查看Pod
# 查看Pod基本信息
[root@master home]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx-dev-58476b668f-m9z6r 1/1 Running 0 23h
nginx-dev-ectype-985c586cc-4dsmh 1/1 Running 0 23h
# 查看Pod的详细信息
[root@master home]# kubectl describe pod nginx-dev-ectype-985c586cc-4dsmh -n dev
Name: nginx-dev-ectype-985c586cc-4dsmh
Namespace: dev
Priority: 0
Node: node2/192.168.6.130
Start Time: Tue, 21 Dec 2021 11:41:33 +0800
Labels: pod-template-hash=985c586cc
run=nginx-dev-ectype
Annotations:
Status: Running
IP: 10.244.2.11
IPs:
IP: 10.244.2.11
Controlled By: ReplicaSet/nginx-dev-ectype-985c586cc
Containers:
nginx-dev-ectype:
Container ID: docker://49f6547fd6e3fd258b458de5ed6ca6e190fee1409af7d79ad1db74be838ca0f8
Image: nginx:latest
Image ID: docker-pullable://nginx@sha256:d13dca1855de09e2fe392c58a66dd73d4ff4b71da4d1720bcf3f47b48c53ca1d
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 21 Dec 2021 11:42:17 +0800
Ready: True
Restart Count: 0
Environment:
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-6rz8v (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-6rz8v:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-6rz8v
Optional: false
QoS Class: BestEffort
Node-Selectors:
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
访问Pod
# 获取PodIP [root@master home]# kubectl get pod -n dev -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-dev-58476b668f-m9z6r 1/1 Running 0 23h 10.244.1.2 node1删除指定Podnginx-dev-ectype-985c586cc-4dsmh 1/1 Running 0 23h 10.244.2.11 node2 # 访问Pod [root@master home]# curl 10.244.2.11 Welcome to nginx! html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.Thank you for using nginx.
# 删除指定Pod [root@master home]# kubectl delete pod nginx-dev-ectype-985c586cc-4dsmh -n dev pod "nginx-dev-ectype-985c586cc-4dsmh" deleted # 此时,显示删除Pod成功,但是再查询,发现又新产生了一个 [root@master home]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE nginx-dev-58476b668f-m9z6r 1/1 Running 0 23h nginx-dev-ectype-985c586cc-tqlpq 1/1 Running 0 84s # 这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建 # 此时要想删除Pod,必须删除Pod控制器 # 查询当前namespace下的Pod控制器 [root@master home]# kubectl get deploy -n dev NAME READY UP-TO-DATE AVAILABLE AGE nginx-dev 1/1 1 1 23h nginx-dev-ectype 1/1 1 1 23h # 删除此PodPod控制器 [root@master home]# kubectl delete deploy nginx-dev-ectype -n dev deployment.apps "nginx-dev-ectype" deleted # 稍等片刻,再查询Pod,发现Pod被删除了 [root@master home]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE nginx-dev-58476b668f-m9z6r 1/1 Running 0 23h配置方式操作
创建一个pod-nginx.yaml,内容如下:
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
spec:
containers:
- image: nginx:latest
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
执行对应的创建和删除命令
# 创建 [root@master home]# kubectl create -f pod-nginx.yaml pod/nginx created # 删除 [root@master home]# kubectl delete -f pod-nginx.yaml pod "nginx--dev" deletedLabel
一些常用的Label 示例如下:
- 版本标签:“version”:“release”, “version”:“stable”…
- 环境标签:“environment”:“dev”,“environment”:“test”,“environment”:“pro”
- 架构标签:“tier”:“frontend”,“tier”:“backend”
有两种Label Selector:
-
基于等式的Label Selector
name = slave: 选择所有包含Label中key="name"且value="slave"的对象
env != production: 选择所有包括Label中的key="env"且value不等于"production"的对象
-
基于集合的Label Selector
name in (master, slave): 选择所有包含Label中的key="name"且value="master"或"slave"的对象
name not in (frontend): 选择所有包含Label中的key="name"且value不等于"frontend"的对象
标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号","进行分隔即可。例如:
name=slave,env!=production
name not in (frontend),env!=production
命令方式# 为Pod资源打标签 [root@master home]# kubectl label pod nginx version=1.0.0 -n dev pod/nginx labeled # 查看Pod标签 [root@master home]# kubectl get pod nginx -ndev --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx 1/1 Running 0 143m version=1.0.0 # 为pod资源更新标签 [root@master home]# kubectl label pod nginx version=2.0.0 -n dev --overwrite pod/nginx labeled # 查看Pod标签 [root@master home]# kubectl get pod nginx -ndev --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx 1/1 Running 0 4h7m version=2.0.0 # 筛选标签 [root@master home]# kubectl get pod -ndev -l version=2.0.0 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx 1/1 Running 0 4h10m version=2.0.0 [root@master home]# kubectl get pod -ndev -l version!=2.0.0 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx-dev-58476b668f-m9z6r 1/1 Running 0 28h pod-template-hash=58476b668f,run=nginx-dev # 删除标签 [root@master home]# kubectl label pod nginx version- -ndev pod/nginx labeled配置方式
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
labels:
version: "3.0"
env: "test"
spec:
containers:
- image: nginx:latest
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
# 执行对应的更新命令 [root@master data]# kubectl apply -f pod-nginx.yaml pod/nginx configuredDeployment 命令操作
# 命令格式: kubectl create deployment 名称 [参数]
# --image 指定pod的镜像
# --port 指定端口
# --replicas 指定创建pod数量
# --namespace 指定namespace
[root@master data]# kubectl run nginx-test --image=nginx:latest --port=80 --replicas=3 -ndev
deployment.apps/nginx-test created
# 查看创建的Pod
[root@master data]# kubectl get pod -ndev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 4h48m
nginx-dev-58476b668f-m9z6r 1/1 Running 0 28h
nginx-test-5687b54bfc-kc9mw 1/1 Running 0 2m2s
nginx-test-5687b54bfc-rrbgb 1/1 Running 0 2m2s
nginx-test-5687b54bfc-wc9md 1/1 Running 0 2m2s
# 查看deployment的信息
# UP-TO-DATE:成功升级的副本数量
# AVAILABLE:可用副本的数量
[root@master data]# kubectl get deploy -ndev
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-dev 1/1 1 1 29h
nginx-test 3/3 3 3 26m
# 查看选择器
[root@master data]# kubectl get deploy -ndev -owide
NAME READY UP-TO-DATE AVAILABLE AGE ConTAINERS IMAGES SELECTOR
nginx-dev 1/1 1 1 29h nginx-dev nginx:latest run=nginx-dev
nginx-test 3/3 3 3 33m nginx-test nginx:latest run=nginx-test
# 查看deployment的详细信息
[root@master data]# kubectl describe deploy nginx-test -ndev
Name: nginx-test
Namespace: dev
CreationTimestamp: Wed, 22 Dec 2021 16:19:26 +0800
Labels: run=nginx-test
Annotations: deployment.kubernetes.io/revision: 1
Selector: run=nginx-test
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: run=nginx-test
Containers:
nginx-test:
Image: nginx:latest
Port: 80/TCP
Host Port: 0/TCP
Environment:
Mounts:
Volumes:
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets:
NewReplicaSet: nginx-test-5687b54bfc (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 38m deployment-controller Scaled up replica set nginx-test-5687b54bfc to 3
# 删除
[root@master data]# kubectl delete deploy nginx-test -ndev
deployment.apps "nginx-test" deleted
配置操作
创建一个deploy-nginx.yaml,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- image: nginx:latest
name: nginx
ports:
- containerPort: 80
protocol: TCP
# 创建: [root@master data]# kubectl create -f deploy-nginx.yaml deployment.apps/nginx-deploy created # 删除: [root@master data]# kubectl delete -f deploy-nginx.yaml deployment.apps "nginx-deploy" deletedService
Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。
创建集群内部可访问的Service# 暴露Service [root@master data]# kubectl expose deploy nginx-deploy --name svc-nginx-deploy-test --type=ClusterIP -ndev service/svc-nginx-deploy-test exposed # 查看service [root@master data]# kubectl get svc svc-nginx-deploy-test -ndev -owide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR svc-nginx-deploy-test ClusterIP 10.109.82.64创建集群外部也可访问的Service80/TCP 109s run=nginx # 这里产生了一个CLUSTER-IP,这就是service的IP,在Service的生命周期中,这个地址是不会变动的 # 可以通过这个IP访问当前service对应的Pod [root@master data]# curl 10.109.82.64:80 ...... Welcome to nginx! ......
# 上面创建的Service的type类型为ClusterIP,这个ip地址只用集群内部可访问 # 如果需要创建外部也可以访问的Service,需要修改type为NodePort [root@master data]# kubectl expose deploy nginx-deploy --name=svc-nginx-deploy-test2 --type=NodePort --port=80 --target-port=80 -ndevservice/svc-nginx-deploy-test2 exposed # 此时查看,出现了NodePort类型的Service,而且有一对Port(80:31569/TCP) [root@master data]# kubectl get svc svc-nginx-deploy-test2 -ndev -owide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR svc-nginx-deploy-test2 NodePort 10.104.82.11删除Service80:31569/TCP 4m27s run=nginx # 接下来就可以通过集群外的主机访问 节点IP:31928访问服务了 # 例如在的电脑主机上通过浏览器访问下面的地址 http://192.168.6.128:31569
[root@master data]# kubectl delete svc svc-nginx-deploy-test -ndev service "svc-nginx-deploy-test" deleted配置方式
创建svc-nginx.yaml,内容如下:
apiVersion: v1
kind: Service
metadata:
name: svc-nginx-deploy-test-file
namespace: dev
spec:
clusterIP: 10.109.179.231 #固定svc的内网ip
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: ClusterIP
# 创建命令: [root@master data]# kubectl create -f svc-nginx.yaml service/svc-nginx-deploy-test-file created # 删除命令: [root@master data]# kubectl delete -f svc-nginx.yaml service "svc-nginx-deploy-test-file" deleted
至此,已经介绍完了Namespace、Pod、Label、Deployment、Service资源的基本操作。



