十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章为大家分享kubernetes中kubectl的管理方法。文章涵盖kubectl 陈述式管理方法、kubectl 声明式管理方法以及kubectl的核心资源介绍,希望大家通过这篇文章能有所收获。
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、成都网站制作、屯留网络推广、小程序设计、屯留网络营销、屯留企业策划、屯留品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供屯留建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
kubectl小洁:
kubectl是官方的CLI命令行工具,用于apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径。
1、查看当前集群所有命名空间
[root@test-nodes1 ~]# kubectl get namespace
NAME STATUS AGE
default Active 42h
kube-node-lease Active 42h
kube-public Active 42h
kube-system Active 42h
------------------------------------------------------------------------------------------
2、查看default命名空间下的所有资源
[root@test-nodes1 ~]# kubectl get all -n default
NAME READY STATUS RESTARTS AGE
pod/nginx-ds-76fr8 0/1 ImagePullBackOff 0 39h
pod/nginx-ds-zz7jn 0/1 ErrImagePull 0 39h
pod/nginx-ds1-qg45q 1/1 Running 0 39h
pod/nginx-ds1-whnmv 1/1 Running 0 39h
#pod资源
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 192.168.0.1 443/TCP 42h
#service资源
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/nginx-ds 2 2 0 2 0 39h
daemonset.apps/nginx-ds1 2 2 2 2 2 39h
#pod控制器
------------------------------------------------------------------------------------------
3、创建与删除命名空间
[root@test-nodes1 ~]# kubectl create namespace test
namespace/test created
[root@test-nodes1 ~]# kubectl get namespace
NAME STATUS AGE
default Active 42h
kube-node-lease Active 42h
kube-public Active 42h
kube-system Active 42h
test Active 6s
[root@test-nodes1 ~]# kubectl delete namespace test
namespace "test" deleted
------------------------------------------------------------------------------------------
4、创建deployment(pods控制器)资源
[root@test-nodes1 ~]# kubectl create deployment nignx-dp --image=test-harbor.cedarhd.com/public/nginx:v1.7.9 -n kube-public
deployment.apps/nignx-dp created
------------------------------------------------------------------------------------------
5、查看kube-public命名空间下的deployment资源控制器
[root@test-nodes1 ~]# kubectl get deployment -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nignx-test 0/1 1 0 70s
------------------------------------------------------------------------------------------
6、查看kube-public命名空间下pods的运行情况
[root@test-nodes1 ~]# kubectl get deployment -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nignx-test 1/1 1 1 21s
------------------------------------------------------------------------------------------
7、查看kube-public空间下的pods资源
[root@test-nodes1 ~]# kubectl get pods -n kube-public -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nignx-dp-7f6d4979bd-nnc57 0/1 ImagePullBackOff 0 13m 172.7.21.4 test-nodes1.cedarhd.com
nignx-test-655d6fbcb5-r9t57 1/1 Running 0 4m1s 172.7.22.4 test-nodes2.cedarhd.com
------------------------------------------------------------------------------------------
8、在test-nodes2.cedarhd.com节点上curl 172.7.22.4 nginx
[root@test-nodes2 ~]# curl 172.7.22.4
Welcome to nginx!
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.
------------------------------------------------------------------------------------------
9、查看deployment下具体pods(nginx-test)详细信息
[root@test-nodes1 ~]# kubectl describe deployment nignx-test -n kube-public
Name: nignx-test
Namespace: kube-public
CreationTimestamp: Mon, 03 Feb 2020 02:02:59 -0500
Labels: app=nignx-test
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nignx-test
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nignx-test
Containers:
nginx:
Image: test-harbor.cedarhd.com/public/nginx:v1.7.9
Port:
Host Port:
Environment:
Mounts:
Volumes:
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets:
NewReplicaSet: nignx-test-655d6fbcb5 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 22m deployment-controller Scaled up replica set nignx-test-655d6fbcb5 to 1
------------------------------------------------------------------------------------------
10、进入nginx-test pod资源
[root@test-nodes1 ~]# kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nignx-test-655d6fbcb5-r9t57 1/1 Running 0 24m
[root@test-nodes1 ~]# kubectl exec -ti nignx-test-655d6fbcb5-r9t57 /bin/bash -n kube-public
#与docker 操作方法一致
root@nignx-test-655d6fbcb5-r9t57:/# ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
12: eth0@if13: mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:07:16:04 brd ff:ff:ff:ff:ff:ff
inet 172.7.22.4/24 brd 172.7.22.255 scope global eth0
valid_lft forever preferred_lft forever
------------------------------------------------------------------------------------------
11、删除pod资源(即重启)
[root@test-nodes1 ~]# kubectl delete pod nignx-test-655d6fbcb5-r9t57 -n kube-public
pod "nignx-test-655d6fbcb5-r9t57" deleted
[root@test-nodes1 ~]# kubectl get pods -n kube-public -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nignx-dp-7f6d4979bd-nnc57 0/1 ImagePullBackOff 0 40m 172.7.21.4 test-nodes1.cedarhd.com
nignx-test-655d6fbcb5-c42z8 1/1 Running 0 18s 172.7.21.5 test-nodes1.cedarhd.com
------------------------------------------------------------------------------------------
12、删除deployment
[root@test-nodes1 ~]# kubectl get deploy -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nignx-dp 0/1 1 0 53m
nignx-test 1/1 1 1 36m
[root@test-nodes1 ~]# kubectl delete deploy nignx-dp -n kube-public
deployment.extensions "nignx-dp" deleted
------------------------------------------------------------------------------------------
13、为nginx-dp pod资源创建service资源,保障pod的高可用,通过集群IP访问
[root@test-nodes1 ~]# kubectl get all -n kube-public
NAME READY STATUS RESTARTS AGE
pod/nginx-dp-5b9b697bcc-jtrlp 1/1 Running 0 17s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-dp 1/1 1 1 17s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-dp-5b9b697bcc 1 1 1 17s
[root@test-nodes1 ~]# kubectl get pods -n kube-public -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dp-5b9b697bcc-jtrlp 1/1 Running 0 3m19s 172.7.21.4 test-nodes1.cedarhd.com
[root@test-nodes1 ~]# kubectl expose deployment nginx-dp --port=80 -n kube-public
service/nginx-dp exposed
[root@test-nodes1 ~]# kubectl get svc -n kube-public #查看service资源
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.224.56 80/TCP 12m
[root@test-nodes1 ~]# kubectl get all -n kube-public
NAME READY STATUS RESTARTS AGE
pod/nginx-dp-5b9b697bcc-jtrlp 1/1 Running 0 5m21s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx-dp ClusterIP 192.168.224.56 80/TCP 79s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-dp 1/1 1 1 5m21s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-dp-5b9b697bcc 1 1 1 5m21s
[root@test-nodes1 ~]# curl 192.168.224.56
Welcome to nginx!
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.
[root@test-nodes1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.1:443 nq
-> 10.3.153.221:6443 Masq 1 0 0
-> 10.3.153.222:6443 Masq 1 0 0
TCP 192.168.224.56:80 nq
-> 172.7.21.4:80 Masq 1 0 0
小结:
声明式资源管理方法依赖于—资源配置清单(yaml\json),偏于修改POD配置。
1、查看当前pod的资源配置清单
[root@test-nodes1 ~]# kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-5b9b697bcc-jtrlp 1/1 Running 0 5h31m
-nodes1.cedarhd.com
[root@test-nodes1 ~]# kubectl get pods nginx-dp-5b9b697bcc-jtrlp -n kube-public -o yaml
apiVersion: v1
kind: Pod #类型为pod
metadata:
creationTimestamp: "2020-02-03T07:50:11Z"
generateName: nginx-dp-5b9b697bcc-
labels:
app: nginx-dp
pod-template-hash: 5b9b697bcc
name: nginx-dp-5b9b697bcc-jtrlp
namespace: kube-public
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: nginx-dp-5b9b697bcc
uid: 30bbaf90-c97e-4167-9419-45a632e9b3ce
resourceVersion: "222257"
selfLink: /api/v1/namespaces/kube-public/pods/nginx-dp-5b9b697bcc-jtrlp
uid: 59d63844-8ee7-4d7e-8536-d4e5de1ba903
spec:
containers:
- image: test-harbor.cedarhd.com/public/nginx:v1.7.9
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-nt4w9
readOnly: true
DNSPolicy: ClusterFirst
enableServiceLinks: true
nodeName: test-nodes1.cedarhd.com
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
volumes:
- name: default-token-nt4w9
secret:
defaultMode: 420
secretName: default-token-nt4w9
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2020-02-03T07:50:11Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2020-02-03T07:50:14Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2020-02-03T07:50:14Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2020-02-03T07:50:11Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: docker://745d5ad3412e5bccf2fb27dacce57e76987e8f6881cdb3aec79912888ba37ad6
image: test-harbor.cedarhd.com/public/nginx:v1.7.9
imageID: docker-pullable://test-harbor.cedarhd.com/public/nginx@sha256:b1f5935eb2e9e2ae89c0b3e2e148c19068d91ca502e857052f14db230443e4c2
lastState: {}
name: nginx
ready: true
restartCount: 0
state:
running:
startedAt: "2020-02-03T07:50:13Z"
hostIP: 10.3.153.221
phase: Running
podIP: 172.7.21.4
qosClass: BestEffort
startTime: "2020-02-03T07:50:11Z"
------------------------------------------------------------------------------------------
2、获取service资源的配置清单
[root@test-nodes1 ~]# kubectl get service -n kube-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.224.56 80/TCP 5h31m
[root@test-nodes1 ~]# kubectl get service nginx-dp -o yaml -n kube-public
apiVersion: v1
kind: Service #类型为service
metadata:
creationTimestamp: "2020-02-03T07:54:13Z"
labels:
app: nginx-dp
name: nginx-dp
namespace: kube-public
resourceVersion: "222606"
selfLink: /api/v1/namespaces/kube-public/services/nginx-dp
uid: 1b2310b5-6016-4692-b632-5c43d6dc4de5
spec:
clusterIP: 192.168.224.56
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-dp
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
------------------------------------------------------------------------------------------
3、explain查看字段帮助说明
kubectl explain service.metadata
------------------------------------------------------------------------------------------
4、新建一个service的资源配置清单
[root@test-nodes1 ~]# vi nginx-ds-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ds
name: nginx-ds
namespace: kube-public
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-ds
sessionAffinity: None
type: ClusterIP
------------------------------------------------------------------------------------------
5、通过声明式资源配置清单创建一个service资源
[root@test-nodes1 ~]# kubectl create -f nginx-ds-svc.yaml
service/nginx-ds created
[root@test-nodes1 ~]# kubectl get service -n kube-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.224.56 80/TCP 5h39m
nginx-ds ClusterIP 192.168.66.3 80/TCP 16s
------------------------------------------------------------------------------------------
6、在线修改nginx-ds的 service 资源端口为81
[root@test-nodes1 ~]# kubectl get svc -n kube-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.224.56 80/TCP 5h49m
nginx-ds ClusterIP 192.168.66.3 80/TCP 10m
[root@test-nodes1 ~]# kubectl edit svc nginx-ds -n kube-public
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2020-02-03T13:23:41Z"
labels:
app: nginx-ds
name: nginx-ds
namespace: kube-public
resourceVersion: "250724"
selfLink: /api/v1/namespaces/kube-public/services/nginx-ds
uid: 5840630d-e00d-4e98-91a1-2b65a1eb22f4
spec:
clusterIP: 192.168.66.3
ports:
- port: 81 #修改对外端口81
protocol: TCP
targetPort: 80
selector:
app: nginx-ds
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
"/tmp/kubectl-edit-wp634.yaml" 27L, 684C written
service/nginx-ds edited
[root@test-nodes1 ~]# kubectl get svc -n kube-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.224.56 80/TCP 5h50m
nginx-ds ClusterIP 192.168.66.3 81/TCP 10m
------------------------------------------------------------------------------------------
7、删除一个service资源
[root@test-nodes1 ~]# kubectl delete svc nginx-ds -n kube-public
service "nginx-ds" deleted
[root@test-nodes1 ~]# kubectl get all -n kube-public
NAME READY STATUS RESTARTS AGE
pod/nginx-dp-5b9b697bcc-jtrlp 1/1 Running 0 6h2m
#pod资源,承载容器应用所在
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx-dp ClusterIP 192.168.224.56 80/TCP 5h67m
#service资源,Service是Kubernetes里最核心的资源对象之一,Service定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实力
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-dp 1/1 1 1 6h2m
#deployment资源,Deployment同样也是Kubernetes系统的一个核心概念,
主要职责和RC一样的都是保证Pod的数量和健康,可理解为pod控制器,
当我们删除pod时,会再启动,不是真正删除,如需删除该pod,必须删除
该控制器
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-dp-5b9b697bcc 1 1 1 6h2m
1、创建一个nginx pod
[root@test-nodes1 ~]# vi nginx-pod.yaml
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: web spec: containers: - name: nginx image: test-harbor.cedarhd.com/public/nginx:v1.7.9 ports: - containerPort: 80 [root@test-nodes1 ~]# kubectl create -f nginx-pod.yaml #创建一个POD pod/nginx created [root@test-nodes1 ~]# kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx 1/1 Running 0 10m #刚刚创建的POD pod/nginx-ds1-qg45q 1/1 Running 0 47h pod/nginx-ds1-whnmv 1/1 Running 0 47h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 192.168.0.1
443/TCP 2d2h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/nginx-ds1 2 2 2 2 2 47h ------------------------------------------------------------------------------------------ 2、为该pod创建一个service [root@test-nodes1 ~]# kubectl expose pod nginx --port=80 -n default service/nginx exposed [root@test-nodes2 ~]# kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx 1/1 Running 0 14m pod/nginx-ds1-qg45q 1/1 Running 0 47h pod/nginx-ds1-whnmv 1/1 Running 0 47h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 192.168.0.1 443/TCP 2d2h service/nginx ClusterIP 192.168.123.163 80/TCP 107s NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/nginx-ds1 2 2 2 2 2 47h [root@test-nodes2 ~]# curl 192.168.123.163 获取nginx页面 ------------------------------------------------------------------------------------------ 3、创建一个deployment [root@test-nodes2 ~]# kubectl create deployment nginx-test --image=test-harbor.cedarhd.com/public/nginx:v1.7.9 deployment.apps/nginx-test created [root@test-nodes2 ~]# kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx 1/1 Running 0 27m pod/nginx-ds1-qg45q 1/1 Running 0 47h pod/nginx-ds1-whnmv 1/1 Running 0 47h pod/nginx-test-5674474869-5nr7j 1/1 Running 0 4s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 192.168.0.1 443/TCP 2d2h service/nginx ClusterIP 192.168.123.163 80/TCP 15m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/nginx-ds1 2 2 2 2 2 47h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-test 1/1 1 1 4s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-test-5674474869 1 1 1 4s
以上就是kubernetes中kubectl管理方法的介绍,内容较为全面,小编相信有部分知识点可能是我们日常工作可能会见到或用到的。希望你能通过这篇文章学到更多知识。