pod(一)Kubernetes(k8s)创建pod的两种方式
目录 一.系统环境
服务器版本
docker软件版本
CPU架构
CentOS Linux release 7.4.1708 (Core)
Docker version 20.10.12
x86_64 二.前言
docker可以创建容器,Kubernetes不能直接创建容器,Kubernetes创建的是pod,pod里面包含了一个或者多个容器。
创建pod的 前提 是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》 https://www.cnblogs.com/renshengdezheli/p/16686769.html 三.pod
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
Pod(就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的 "逻辑主机",其中包含一个或多个应用容器, 这些容器相对紧密地耦合在一起。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。
除了应用容器,Pod 还可以包含在 Pod 启动期间运行的 Init 容器。 你也可以在集群中支持临时性容器 的情况下,为调试的目的注入临时性容器。
pod里面有一个或者多个容器,常见的容器有docker容器,containerd容器,除了 Docker 之外,Kubernetes 支持 很多其他容器运行时, Docker 是最有名的容器运行时, 使用 Docker 的术语来描述 Pod 会很有帮助。
Pod 的共享上下文包括一组 Linux 命名空间、控制组(cgroup)和可能一些其他的隔离方面, 即用来隔离 Docker 容器的技术。 在 Pod 的上下文中,每个独立的应用可能会进一步实施隔离。
就 Docker 概念的术语而言,Pod 类似于共享命名空间和文件系统卷的一组 Docker 容器。 四.创建pod4.1 环境介绍
Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点
服务器
操作系统版本
CPU架构
进程
功能描述
k8scloude1/192.168.110.130
CentOS Linux release 7.4.1708 (Core)
x86_64
docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico
k8s master节点
k8scloude2/192.168.110.129
CentOS Linux release 7.4.1708 (Core)
x86_64
docker,kubelet,kube-proxy,calico
k8s worker节点
k8scloude3/192.168.110.128
CentOS Linux release 7.4.1708 (Core)
x86_64
docker,kubelet,kube-proxy,calico
k8s worker节点
Kubernetes创建pod一般有两种方式: 使用命令行的方式创建pod; 使用yaml文件创建pod 4.2 使用命令行的方式创建pod
创建pod的命令为 kubectl run ,kubectl创建pod的帮助可以查看网页版,网页版地址为: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#create
查看kubectl run创建pod的帮助 [root@k8scloude1 ~]# kubectl run --help Create and run a particular image in a pod. Examples: # Start a nginx pod. kubectl run nginx --image=nginx # Start a hazelcast pod and let the container expose port 5701. kubectl run hazelcast --image=hazelcast/hazelcast --port=5701 ...... Usage: kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options] Use "kubectl options" for a list of global command-line options (applies to all commands).
首先拉取我们需要的镜像,先在worker节点拉取nginx镜像 [root@k8scloude2 ~]# docker pull nginx [root@k8scloude3 ~]# docker pull nginx4.2.1 创建最简单的pod
使用nginx镜像创建一个pod #nginx为pod名字 --image=nginx表示使用Nginx镜像 [root@k8scloude1 pod]# kubectl run nginx --image=nginx pod/nginx created
查看pod,STATUS为Running就表示pod创建成功 [root@k8scloude1 pod]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx 0/1 ContainerCreating 0 6s [root@k8scloude1 pod]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 54s
删除pod [root@k8scloude1 pod]# kubectl delete pod nginx pod "nginx" deleted4.2.2 创建pod,指定镜像下载策略
使用nginx镜像创建一个pod,镜像的下载策略为IfNotPresent本地没有才下载镜像
镜像的下载策略:Always:每次都下载最新的镜像;Never:只使用本地镜像,从不下载,IfNotPresent:本地没有才下载镜像 默认值为:Always #nginx为pod名字 --image=nginx表示使用Nginx镜像 --image-pull-policy=IfNotPresent表示镜像下载策略为IfNotPresent本地没有才下载镜像 [root@k8scloude1 pod]# kubectl run nginx --image=nginx --image-pull-policy=IfNotPresent pod/nginx created [root@k8scloude1 pod]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 5s #删除pod [root@k8scloude1 pod]# kubectl delete pod nginx pod "nginx" deleted
注意:kubectl delete pod nginx会有点慢,加了--force 强制删除pod,删除pod会快很多 [root@k8scloude1 pod]# kubectl delete pod nginx --force warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "nginx" force deleted4.2.3 创建pod,指定环境变量和标签
查看pod标签的帮助 [root@k8scloude1 ~]# kubectl run --help | grep labels # Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the container. kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod" -l, --labels="": Comma separated labels to apply to the pod(s). Will override previous values.
创建pod,指定环境变量和标签 #nginx为pod名字 --image=nginx表示使用Nginx镜像 --image-pull-policy=IfNotPresent表示镜像下载策略为IfNotPresent本地没有才下载镜像 --env:设置变量xx=1,yy=2 --labels设置标签,给pod打上"xx=1,yy=2"的标签 [root@k8scloude1 pod]# kubectl run nginx --image=nginx --image-pull-policy=IfNotPresent --env "xx=1" --env "yy=2" --labels="xx=1,yy=2" pod/nginx created #查看pod [root@k8scloude1 pod]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 20s 10.244.112.136 k8scloude2
进入到pod里,可以看到变量xx,yy [root@k8scloude1 pod]# kubectl exec -it nginx -- bash root@nginx:/# echo $xx 1 root@nginx:/# echo $yy 2 root@nginx:/# exit exit
查看pod的标签,--show-labels参数显示标签 [root@k8scloude1 pod]# kubectl get pod -o wide --show-labels NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS nginx 1/1 Running 0 4m59s 10.244.112.136 k8scloude2 xx=1,yy=24.3 使用yaml文件的方式创建pod4.3.1 yaml文件概述
YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。主要强调这种语言是以数据为中心,而不是以标记语言为重心,例如像xml语言就会使用大量的标记。
YAML是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。YAML的配置文件后缀为 .yaml。 yaml文件基本语法: YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16。 数据结构采用键值对的形式,即 键名称: 值,注意冒号后面要有空格。 每个清单(数组)成员以单行表示,并用短杠+空白(- )起始。或使用方括号([]),并用逗号+空白(, )分开成员。 每个散列表的成员用冒号+空白(: )分开键值和内容。或使用大括号({ }),并用逗号+空白(, )分开。 字符串值一般不使用引号,必要时可使用,使用双引号表示字符串时,会转义字符串中的特殊字符(例如 )。使用单引号时不会转义字符串中的特殊字符。 大小写敏感 使用缩进表示层级关系,缩进不允许使用tab,只允许空格,因为有可能在不同系统下tab长度不一样 缩进的空格数可以任意,只要相同层级的元素左对齐即可 在单一文件中,可用连续三个连字号(---)区分多个文件。还有选择性的连续三个点号(…)用来表示文件结尾。 "#"表示注释,可以出现在一行中的任何位置,单行注释 在使用逗号及冒号时,后面都必须接一个空白字符,所以可以在字符串或数值中自由加入分隔符号(例如:5,280或http://www.wikipedia.org)而不需要使用引号。
接下里使用yaml文件的方式创建pod 4.3.2 使用yaml文件的方式创建pod
--dry-run 模拟运行,并不会真的创建一个pod , --dry-run=client输出信息少 ,--dry-run=server输出信息多, -o yaml以yaml文件的格式输出
--dry-run=server输出信息如下:内容很多 #nginx为pod名字 --image=nginx表示使用Nginx镜像 --image-pull-policy=IfNotPresent表示镜像下载策略为IfNotPresent本地没有才下载镜像 [root@k8scloude1 pod]# kubectl run nginx --image=nginx --image-pull-policy=IfNotPresent --dry-run=server -o yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: "2022-01-12T07:51:11Z" labels: run: nginx name: nginx namespace: pod uid: afa40310-3efd-4d9f-8337-8e1db955c6f7 spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: nginx resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /var/run/secrets/kubernetes.io/serviceaccount name: kube-api-access-w56gz readOnly: true dnsPolicy: ClusterFirst enableServiceLinks: true preemptionPolicy: PreemptLowerPriority 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: kube-api-access-w56gz projected: defaultMode: 420 sources: - serviceAccountToken: expirationSeconds: 3607 path: token - configMap: items: - key: ca.crt path: ca.crt name: kube-root-ca.crt - downwardAPI: items: - fieldRef: apiVersion: v1 fieldPath: metadata.namespace path: namespace status: phase: Pending qosClass: BestEffort
--dry-run=client输出信息如下:输出内容恰到好处 [root@k8scloude1 pod]# kubectl run nginx --image=nginx --image-pull-policy=IfNotPresent --dry-run=client -o yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: nginx name: nginx spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: nginx resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {}
生成创建pod的yaml文件 [root@k8scloude1 pod]# kubectl run nginx --image=nginx --image-pull-policy=IfNotPresent --dry-run=client -o yaml >nginx.yaml
yaml文件里有很多变量,可以使用kubectl explain查看yaml文件每个字段的含义 # kubectl explain pods查看一级字段有哪些,每个的含义 [root@k8scloude1 ~]# kubectl explain pods KIND: Pod VERSION: v1 DESCRIPTION: Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts. FIELDS: apiVersion APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources kind Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds metadata
流浪地球2满江红持续领跑,春节档票房大局已定?随着大年初三的到来,2023年癸卯兔年春节档的大局逐渐明朗。最值得一提的,就是流浪地球2满江红相继成为中国电影市场第101部第102部票房破10亿元的电影。据灯塔专业版实时数据,截
预见金兔财通基金吴林惠把握高质量发展新机遇金梓才2023年是信心恢复之年劫波渡尽,拨云见日。在一片忐忑与期许交织彷徨与寄望互融中,我们告别了2022年,迎来了崭新的2023年。在这辞旧迎新的重要时点,券商中国券中社APP邀请各大金融机构代表拍摄新春祝福
天眼查年终盘点十大商标1。最动听商标之孤勇者孤勇者是英雄联盟动画主题曲,由陈奕迅演唱,被小学生群体广泛传唱,其经典歌词爱你孤身走暗巷,爱你不跪的模样,爱你对峙过绝望,不肯哭一场鼓舞了许多人。天眼查App
总台CGTN联合全球多家媒体举办洞见系列媒体论坛近日,中央广播电视总台CGTN联合全球10余家媒体,成功举办洞见媒体在全球抗疫中的责任和力量及洞见携手同行共促复苏两场媒体论坛。活动邀请了来自美国英国澳大利亚巴基斯坦菲律宾柬埔寨肯
杂感随笔丨年味的时代表达朱波时间真快,兔年春节就这样来了。谈及过年,时常会听到很多人在吐槽年味越来越淡了过年越来越没意思了乍一听,记忆里的春节,记忆里的年味儿,仿佛伴随着时光的流逝,在人们心底悄然消失了。
好讨厌临时抱佛脚的人有句俗话说平时不烧香,临时抱佛脚!之前一直以为说的是读书的学生,平时不好好学习,快要考试了,急得如同热锅上的蚂蚁不知如何是好。现在看来这句话不也单单指学生,对某些成年人也同样适用已
湖南怀化芷江机场航线航班全路线来了,你需要看看自上次平台推荐了怀化芷江机场开通深圳芷江成都新航线航班信息后,很多读者留言询问怀化芷江机场现有的航班班次。今天,我们将怀化芷江机场的现行飞行航班进行梳理,希望对大家有用。据悉,今年
西行129天洛阳龙门石窟第四天下午便来到了千年帝都,牡丹花城洛阳。(奶奶信佛来拜佛,希望她在那边安好)景点门口前拍照次日早晨我按原计划的规划,早上去了一趟龙门石窟,怀着对信仰的虔诚,我游览了万
以色列朝圣之旅圣母圣子的故乡拿撒勒拿撒勒位于以色列北部,距加利利湖大约30公里,人口不足10万,居民多为信奉基督教的阿拉伯人,是以色列最大的阿拉伯人占人口多数的城市。山谷中的拿撒勒古城拿撒勒之所以成为基督徒们的圣地
这家德国汽车工业的幕后之王,会在新能源时代被抛下吗?提到德国汽车,大家想到的往往是奔驰宝马大众,但这些著名品牌背后,还有一家无冕之王隐形冠军,地位举足轻重,却少为人知。今天,让我们了解下它的故事,以及在新能源汽车时代面临的危机与挑战
人民日报点名称赞!张帅除夕夜34岁生日挺进澳网16强,令球迷兴奋北京时间1月21日,这一天对于每一位中国人来说,是一个重要的日子。同时对于中国女网金花张帅而言,更是一个职业生涯的里程碑。在今日澳大利亚网球公开赛上,张帅再次证明了自己的实力。虽然