k8s_核心对象及应用kubectl context、pod
k8s是如何创建资源的?
k8s可以通过yml⽂件创建k8s对象(资源),然后发布k8s集群操作。
kubectl context
kubectl context是k8s集群的上下⽂对象,存放着集群相关信息。常用查询kubectl context有如下命令,至于这些信息如何生成的在后续再详细说明,先大概了解kubectl cintext相关信息如何查询。
kubectl config view 查看集群信息
kubectl config get-contexts 得到所有集群context对象信息
kubectl cluster-info 查看当前集群情况
POD
概念
pod是k8s管理的最小单元,Pod和container的关系,⼀个Pod可以有⼀个或多个container
⼀个Pod内共享⼀个namespace,⽤户、⽹络、存储等。简单的说,pod⾥⾯如果有多个container,这些container共享⼀个ip,好⽐⼀个系统中起了多个项⽬,共享IP,⽤端⼝区分。如下图所示
pod的定义文件
下面是最简单的pod定义,完整的pod定义文件的每个字段含义可以自行查阅资料
#应用的api版本 apiVersion: v1 #对象类型 kind种类 kind: Pod #对象元数据 metadata: #pod 名称 name: nginx #labels标签配置 labels: app: nginx #对象详细信息 spec: #容器配置,可以多个 containers: #容器名称 - name: nginx #镜像名称 image: nginx #端口设置 ports: - containerPort: 80
pod的基本操作
创建pod
[root@k8s-01 pod_demo]# kubectl create -f demo_pod_nginx.yml pod/nginx created
查询所有pod资源
[root@k8s-01 pod_demo]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 2m51s
查看所有pod资源详细信息
[root@k8s-01 pod_demo]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 3m30s 10.244.2.24 k8s-03 <none> <none>
查询指定pod详细信息
[root@k8s-01 pod_demo]# kubectl describe pods nginx Name: nginx Namespace: default Priority: 0 Node: k8s-03/192.168.188.133 Start Time: Sat, 25 Sep 2021 23:13:42 +0800 Labels: app=nginx Annotations: <none> Status: Running IP: 10.244.2.24 Containers: nginx: Container ID: docker://15f32743135523f77bd55b76b08dbe34449d3b0991c7f9c2f9d9c57fee51a1d9 Image: nginx Image ID: docker-pullable://nginx@sha256:853b221d3341add7aaadf5f81dd088ea943ab9c918766e295321294b035f3f3e Port: 80/TCP Host Port: 0/TCP State: Running Started: Sat, 25 Sep 2021 23:13:58 +0800 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-c8jx9 (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-c8jx9: Type: Secret (a volume populated by a Secret) SecretName: default-token-c8jx9 Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m40s default-scheduler Successfully assigned default/nginx to k8s-03 Normal Pulling 4m39s kubelet, k8s-03 Pulling image "nginx" Normal Pulled 4m23s kubelet, k8s-03 Successfully pulled image "nginx" Normal Created 4m23s kubelet, k8s-03 Created container nginx Normal Started 4m23s kubelet, k8s-03 Started container nginx
删除pod
[root@k8s-01 pod_demo]# kubectl get pods|grep nginx nginx 1/1 Running 0 5m32s [root@k8s-01 pod_demo]# kubectl delete pods nginx pod "nginx" deleted [root@k8s-01 pod_demo]# kubectl get pods|grep nginx [root@k8s-01 pod_demo]#
pod交互式运行
与docker的交互式运行方式类似,pod的交互式命令如下
kubectl exec -it podname -c containername /bin/bash
#podname可以通过kubectl get pods查询,-c containername可以不加,默认进入pod的第一个container。加上以后可以指定pod内特定的container。
kubectl describe pods podname可以查询指定pod的详细信息,这里面就有该pod包含的所有container信息
和docker exec -it containername /bin/bash有什么区别的?
#kubectl创建的pod可能不在本节点上,这时候本节点docker是无法管理pod下的container的,只有到pod所在节点才能使用docker命令操作该container,而kubectl可以在任何安装kubectl并加入集群的节点上操作任意一个pod任意一个container