- 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:访问PodStatus: 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:
# 获取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资源的基本 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)