k8s学习笔记-02(Pod基础知识)

这篇具有很好参考价值的文章主要介绍了k8s学习笔记-02(Pod基础知识)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:yinwanit@163.com

概念

k8s中不能直接对容器进行管理,k8s中最小得的理单元即Pod。

Pod分为静态POD和动态POD,静态Pod不通过kubelet管理。

同一个pod内共享同一个网络命名空间,IP地址等信息没有配置在具体功能性容器上。

Pod在k8s中归属apiVersion版本为v1。在编写yaml文件中apiVersion应该设置为v1。kind才能设置成Pod。

在k8s中由两种创建pod的方式,一种是通过kubectl run命令;一种是编写yaml文件,使用kubectl  apply -f xxx.yaml   命令用来创建pod

一、静态Pod

静态Pod是由kubelet进程直接维护管理,在k8s中用来构建k8s的环境,如etcd、kube-apiserver、kube-controller-manager、kube-scheduler。静态Pod不是通过Master节点上的apiserver管理。

默认情况下只有Master上会有静态Pod存在。

静态Pod yaml文件存放在特定的文件夹内,只要该文件中存在的yaml文件,kubelet都会自动按照yaml文件内容创建出Pod。

静态Pod路径主要由两个文件控制,一个是服务的yaml文件,一个是服务程序的conf文件,如果两个文件都设置了静态Pod路径,以服务程序config文件为准。
  • yaml文件:kubelet服务的config配置文件文件即默认的 /var/lib/kubelet/config.yaml;使用systemctl status kubelet 查看--config字段
  • conf文件:/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 文件内修改。使用 systemctl status kubelet 查看Drop-In行

1.1 静态Pod文件路径yaml文件

1.找到kubelet 配置文件路径

systemctl status kubelet 命令输出结果中找到 --config= 后面的文件路径。

# systemctl status kubelet

默认情况下kubectl配置文件为 /var/lib/kubelet/config.yaml

2.找到静态Pod路径

在/var/lib/kubelet/config.yaml文件中过滤出 staticPodPath行截取第二列即为静态Pod路径。

# grep -i 'staticPodPath:'  /var/lib/kubelet/config.yaml  | awk  '{print $2}'

默认情况下静态路径在 /etc/kubernetes/manifests 文件夹下。

3.确认文件夹内容

默认情况下静态文件夹内至少包含etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml 四个文件。

# ls -l /etc/kubernetes/manifests

1.2 静态Pod文件路径conf文件

1.找到kubelet 配置文件路径

systemctl status kubelet 命令输出结果中找到Drop-In行。

# systemctl status kubelet

k8s学习笔记-02(Pod基础知识)

默认情况下kubectl配置文件为 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

2.确认是否有配置静态Pod路径

在/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 配置文件中查看是否有--pod-manifest-path配置。

# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf | grep -i 'pod-manifest-path'

k8s学习笔记-02(Pod基础知识)

 如果该命令有输出表示有设置静态Pod路径。

如果yaml文件和conf文件均设置有静态Pod路径,以conf文件内容为准。

k8s学习笔记-02(Pod基础知识)

 

1.3 修改静态Pod路径

一般情况下不建议更改静态Pod路径,如果需要修改,需要保证新的静态Pod路径中有etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml 四个文件。

1.3.1 通过config文件修改静态Pod路径

 1.查看config配置文件路径
# systemctl status kebelet

 --config= 后面的文件路径,默认为/var/lib/kubelet/config.yaml

2.修改config文件
# vim /var/lib/kubelet/config.yaml
staticPodPath: /etc/kubernetes/manifests

在config.yaml中修改staticPodPath后的值,红色字体部分。

 3.重启服务
修改了/var/lib/kubelet/config.yaml文件过后需要重启kubelet服务器后生效。
# systemctl restart kubelet
 

1.3.2 通过kubelet.service.d修改静态Pod路径

 1.查看Kubelet.service.d文件地址
在输出结果中找到Drop-In行,默认路径为 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# systemctl status kubelet

k8s学习笔记-02(Pod基础知识)

 2.修改配置文件

 在/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 文件中在第一个Environment=最后添加--pod-manifest-path=/dir/dir/ ,红色字体部分为添加内容。
# vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --pod-manifest-path=/etc/kubernetes/static_pod"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

3.重启服务

kubelet服务配置文件更改过后需要重启服务。

# systemctl daemon-reload
# systemctl restart kubelet

 

二、常用命令

在k8s中由两种创建pod的方式,一种是通过kubectl run命令;一种是编写yaml文件,使用kubectl  apply -f xxx.yaml   命令用来创建pod

kubectl run pod_name --image

2.1 创建Pod命令(非yaml文件)

使用kubectl run命令行创建一个pod时,至少要指定Pod中运行的容器镜像、Pod的名字

#  kubectl run test_name_pod --image=nginx  --image-pull-policy=IfNotPresent --restart=Always --namespace=kube-system --labels=aa=12  --dry-run=client -o yaml

 命令详解

  • --image(必选):指明当前Pod中运行容器的镜像。
  • --image-pull-policy(可选):指明当前Pod中镜像拉取规则,有三个选项:默认为Always,Always总是去互联网拉取镜像,本地存在也会去互联网拉取;IfNotPresent优先使用本地的镜像,如果本地有镜像则使用本地镜像,本地没有镜像则去互联网拉取;Never只使用本地镜像。
  • --restart:Pod重启规则,有三个选项:默认为Always,Always总是重启,不管是容器创建失败还是容器出错都执行重启容器操作;OnFailure只在容器失败产生故障时重启;Never从来不重启。
  • --namespace:Pod归属于哪个命名空间,默认为当前命名空间,可通过命令  kubectl config get-contexts  查看当前命名空间。
  • --labels:设置Pod的标签,默认标签为 “run: Pod名
  • --dry-run:以调试方式运行,不真实创建出Pod,只检查Pod语法是否有问题。两个选项:默认为server,server输出完整的配置数据;client输出基本的配置数据。
  • -o yaml:表示以yaml的格式输出pod的配置信息,需要和--dry-run搭配使用。
  • 实际需要使用kubectl run命令直接创建Pod时,需要去除掉--dry-run和 -o yaml选项。

2.2 查看Pod

Pod在创建后,需要查看Pod的状态和信息,确保Pod运行正常。

2.2.1 Pod状态查看

查看kube-system命名空间里面所有pod的信息。

# kubectl get pod --show-labels  -o wide -n kube-system

查看所有命名空间里面的pod信息

# kubectl get pod -A --show-labels -o wide

参数详解:

  • --show-labels:展示Pod的标签,k8s中是依靠标签进行资源与资源进行绑定的。
  • -o wide:展示显示的信息,可以看到pod运行在哪个节点上。
  • -n:指定查看哪个命名空间里面的数据,默认为当前命名空间,可用 kebectl config get-contexts 命令查看当前在哪个命名空间下,可用 kubectl get ns查看当前有多少个命名空间。
  • -A:展示所有命名空间,-n和-A不能同时使用。

Pod状态说明:

  • Pengding Pod 因为其他原因导致pod准备开始创建,卡住了还没有创建,一般存在与没有节点可以调度
  • Runing Pod 中容器工作正常。
  • Conmpleted Pod里面的容器正常退出
  • CrashLoopBackOff 创建的时候出错
  • ImagePullBackoff 创建Pod时,拉取镜像下载失败。

2.2.2 Pod状态信息查看

查看Pod的属性信息包括IP地址、包含的容器信息、归属的节点信息,当Pod创建时可以通过kubectl describe 命令查看到Pod创建的过程。

# kubectl describe  pod/pod1  -n kube-system 

查看在kube-system命名空间中pod1名字的pod信息。

Pod运行日志查看

kubectl logs 命令可以查看到Pod中容器运行的日志,多个容器存在与同一个pod时需要使用-c命令指定查看哪个一个容器的运行日志。

# #多容器Pod查看指定容器运行日志 
# kubectl logs pod1 -c c1
# #单容器Pod查看就不需要加-c参数
# kubectl logs pod1

2.2.3 在Pod中执行命令

 Pod中至少运行一个容器,可以像Docker一样进入到Pod中运行的容器中执行命令。在1.17及更高的版本上需要在执行的命令前需要加上 --

Pod直接执行命令

不进入Pod中的容器进行命令执行。

# kubectl exec -it pod_name -n namespace_name  -c container_name -- (需要执行的命令)
# kubectl exec -it pod1 -n kube-system -c c1 -- ls /tmp

 进入到Pod中

使用bash命令可以进入Pod打开Pod中容器的bash终端界面。

#  kubectl exec -it pod_name  -n namespace_name -c container_name -- bash

操作完成过后使用快捷键“ CTRL + D ”退出Pod里面的容器。

拷贝文件到Pod容器中

本地主机文件到Pod的容器中。

# kubectl cp  file_name   pod_name:/dir/  -c container_name

拷贝Pod容器中的文件到主机中。

# kubectl cp   pod_name:/dir/  file_name -c container_name

当Pod中有多个容器时需要使用 -c 参数指定操作哪个容器。只有一个容器时可以不用指定。

2.3 配置修改Pod

2.3.1 设置label 

k8s中各个资源使用label进行互相关联。

查看Pod的标签

 kubectl get pod -A 加上 --show-labels参数可以查看当前环境下所有资源的标签信息。

# kubectl get pod -A --show-labels

添加标签

为名为pod1的Pod添加一个aa=98的标签。

# kubectl label pod  pod_name -n namespace_name   标签名=标签值    #设置指定命名空间中的指定pod的标签
# kubectl label  pod --all -n namespace_name 标签名=标签值 #为指定命令空间中的所有Pod添加标签
# kubectl label  pod --all -A 标签名=标签值 #为当前环境下所有命名空间中所有Pod添加标签 # #例子 # kubectl label pod pod1 aa
=98
# 确认标签设置成功
# kubectl get pod -A --show-labels

删除标签

# kubectl label pod pod_name -n namespace_name 标签名-     #去除掉指定命名空间中的指定Pod的指定标签
# kubectl label pod --all -n namespace_name 标签名- #去除掉指定命名空间中所有Pod中的指定标签
# kubectl label pod -all -A 标签名- #去除掉所有命名空间的中的所有Pod的制定标签名

 2.3.2 重启Pod

K8s中不能直接对Pod进行重启, Pod重启可以通过导出配置文件然后再使用生成的配置文件进行Pod创建。

# kubectl get pod pod_name -n namespace_name -o yaml >  file_name1.yaml && kubectl delete pod pod_name -n namespace_name --force && kubectl apply -f file_name1.yaml && rm -rf file_name1.yaml

红色字体部分按照实际情况填写,如果Pod资源在同一个namespace内,-n 选项可以省略。--force表示立即删除。

命令详解:

  • kubectl get pod pod_name -n namespace_name -o yaml > tmp_restart_pod01.yaml:以yaml格式导出指定命名空间中指定Pod的配置文件到自定义名字的yaml文件中
  • kubectl delete pod pod_name -n namespace_name --force:删除指定命名空间中的指定pod
  • kubectl apply -f file_name.yaml: 使用导出的yaml文件新建一个Pod
  • rm -rf file_name.yaml:删除零时创建的yaml文件

 2.3.3 修改Pod配置

Pod修改有两种方式。

  • 重启Pod类似,通过导出的Pod yaml文件修改了参数过后,删除原有Pod再使用导出的yaml文件进行创建,第一种不累述参考1.3.2重启Pod章节。
  • 直接使用命令在线修改Pod配置,一般container对象内的配置在线修改了也无效。

命令修改Pod

可以自己尝试修改一下label试试,edit进去过后就是就是一个vim文本编辑器,修改完成按照vim的方式退出即可。文章来源地址https://www.toymoban.com/news/detail-630862.html

# kubectl edit  pod pod_name -n namespace_name

到了这里,关于k8s学习笔记-02(Pod基础知识)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s-基础知识(Service,NodePort,CusterIP,NameSpace,资源限制)

    Node Node 是 Pod 真正运行的主机,可以是物理机,也可以是虚拟机。 Annotations 原文链接 Annotations 是 key/value 形式附加于对象的注解。不同于 Labels 用于标志和选择对象,Annotations 则是用来记录一些附加信息,用来辅助应用部署、安全策略以及调度策略等。比如 deployment 使用 an

    2024年01月24日
    浏览(42)
  • k8s学习笔记-3(Pod yaml文件编写)

    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:yinwanit@163.com Pod在k8s中归属apiVersion版本为v1。在编写yaml文件中apiVersion应该设置为v1。kind才能设置成Pod。 编写Pod的yaml文件时可以参考  kubectl explain --api-version=v1  pod. 一级一级查看具体的配置项

    2024年02月14日
    浏览(95)
  • k8s学习笔记-03(Pod yaml文件编写)

    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:yinwanit@163.com Pod在k8s中归属apiVersion版本为v1。在编写yaml文件中apiVersion应该设置为v1。kind才能设置成Pod。 编写Pod的yaml文件时可以参考  kubectl explain --api-version=v1  pod. 一级一级查看具体的配置项

    2024年02月14日
    浏览(31)
  • 学习笔记十四:K8S最小调度单元POD概述

    K8s官方文档:https://kubernetes.io/ K8s中文官方文档: https://kubernetes.io/zh/ K8s Github地址:https://github.com/kubernetes/kubernetes Pod资源对应的官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/ Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器

    2024年02月12日
    浏览(30)
  • 02-k8s学习笔记之相关组件

    kube-apiserver kube-controller-manager cloud-controller-manager kube-scheduler etcd kubelet kube-proxy container runtime

    2024年02月01日
    浏览(37)
  • kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习

    简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离。 这种隔离是怎么做到的呢?它利用了内核提供的 namespace 和 cgroup 这 2 种技术。这些技术能力在 Linux 中已经存在了很长时间。而 Docker 或容器技术致力于将这些功能更易于使用和更

    2024年02月07日
    浏览(50)
  • 【K8S】pod 基础概念讲解

    Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和

    2024年02月13日
    浏览(34)
  • k8s之pod基础(下)

    存活探针和就绪探针,会伴随整个pod的生命周期 就绪探针的特点:pod的状态是running,ready状态是notready,容器不可以提供正常的业务访问,就绪探针不会重启容器 就绪探针exec的方式:(readiness是就绪,probe是探针) 就绪探针httpGet的方式:(readiness是就绪,probe是探针) 就绪

    2024年01月17日
    浏览(27)
  • k8s的pod的基础(上)

    1.pod的相关知识 1.1 pod的基础概念  pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是用绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理pod运行的StatefulSet和Deploment等控制器

    2024年02月13日
    浏览(21)
  • 【云原生】k8s的pod基础(上)

    pod是kubernetes中最小的资源管理组件 ,Pod也是最小化运行容器化应用的资源对象。一 个Pod代表着集群中运行的一个进程 。kubernetes中其他大多数组件都是用绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理pod运行的StatefulSet和Deploment等控制器对象,用于暴露pod应用的service和

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包