K8S Learning(10)——Pod配置

pod.spec.containers属性是pod配置中最为关键的一项配置。

kubectl explain pod.spec.containers
KIND:     Pod
VERSION:  v1
RESOURCE: containers <[]Object>   # 数组,代表可以有多个容器
FIELDS:name  <string>     # 容器名称image <string>     # 容器需要的镜像地址imagePullPolicy  <string> # 镜像拉取策略 command  <[]string> # 容器的启动命令列表,如不指定,使用打包时使用的启动命令args     <[]string> # 容器的启动命令需要的参数列表env      <[]Object> # 容器环境变量的配置ports    <[]Object>     # 容器需要暴露的端口号列表resources <Object>      # 资源限制和资源请求的设置

一、基本配置

创建pod-mix.yaml文件,内容如下:

apiVersion: v1
kind: Pod
metadata:name: pod-mixnamespace: mklabels:owner: mk
spec:containers:- name: tomcatimage: tomcat:lastest- name: busyboximage: busybox:lastest

上面定义了一个比较简单Pod的配置,里面有两个容器:

  • tomcat:用lastest版本的tomcat镜像创建,(tomcat是一个java web容器)

  • busybox:用lastest版本的busybox镜像创建,(busybox是一个小巧的linux命令集合)

# 创建Pod
kubectl apply -f pod-mix.yaml# 查看Pod状况
kubectl get pod -n mk​
# 可以通过describe查看内部的详情
kubectl describe pod pod-mix -n mk
 

二、镜像拉取

创建pod-pull-image.yaml文件,内容如下:

apiVersion: v1
kind: Pod
metadata:name: pod-pull-imagenamespace: mklabels:owner: mk
spec:containers:- name: tomcatimage: tomcat:jre8-openjdk-slim-busterimagePullPolicy: Never # 用于设置镜像拉取策略- name: busyboximage: busybox:lastest

imagePullPolicy,用于设置镜像拉取策略,kubernetes支持配置三种拉取策略:

  • Always:总是从远程仓库拉取镜像(一直远程下载)

  • IfNotPresent:本地有则使用本地镜像,本地没有则从远程仓库拉取镜像(本地有就本地 本地没远程下载)

  • Never:只使用本地镜像,从不去远程仓库拉取,本地没有就报错 (一直使用本地)

默认值说明:

如果镜像tag为具体版本号, 默认策略是:IfNotPresent

如果镜像tag为:latest(最终版本) ,默认策略是always

# 创建Pod
kubectl create -f pod-pull-image.yaml​
# 查看Pod详情
# 此时明显可以看到tomcat镜像有一步Pulling image "pull-image"的过程
kubectl describe pod pod-pull-image -n mk

 

三、启动命令

在前面的例子中,busybox容器一直没有成功运行,因为busybox并不是一个程序,而是类似于一个工具类的集合,kubernetes集群启动管理后,它会自动关闭。解决方法就是让其一直在运行,这就用到了command配置。

创建pod-command.yaml文件,内容如下:

apiVersion: v1
kind: Pod
metadata:name: pod-commandnamespace: mklabels:owner: mk
spec:containers:- name: tomcatimage: tomcat:lastest- name: busyboximage: busybox:lastestcommand: ["/bin/sh","-c","touch /tmp/busybox.log; while true;do /bin/echo $(date +%F %T) >> /tmp/busybox.log; sleep 5; done;"]
command,用于在pod中的容器初始化完毕之后运行一个命令。
# 创建Pod
kubectl create  -f pod-command.yaml
​
# 查看Pod状态
kubectl get pods pod-command -n mk
​
# 进入pod中的busybox容器,查看文件内容
# 补充一个命令: kubectl exec  pod名称 -n 命名空间 -it -c 容器名称 /bin/sh  在容器内部执行命令
kubectl exec pod-command -n dev -it -c busybox /bin/sh
tail -f /tmp/busybox.log

特别说明:通过上面发现command已经可以完成启动命令和传递参数的功能,为什么这里还要提供一个args选项,用于传递参数呢?这其实跟docker有点关系,kubernetes中的command、args两项其实是实现覆盖Dockerfile中ENTRYPOINT的功能。1 如果command和args均没有写,那么用Dockerfile的配置。2 如果command写了,但args没有写,那么Dockerfile默认的配置会被忽略,执行输入的command3 如果command没写,但args写了,那么Dockerfile中配置的ENTRYPOINT的命令会被执行,使用当前args的参数4 如果command和args都写了,那么Dockerfile的配置被忽略,执行command并追加上args参数

四、环境变量

创建pod-env.yaml文件,内容如下:

apiVersion: v1
kind: Pod
metadata:name: pod-envnamespace: mklabels:owner: mk
spec:containers:- name: tomcatimage: tomcat:lastestenv: # 设置环境变量列表- name: "jdkVersion"value: "1.8"- name: "tomcatVersion"value: "tomcat8"
env,环境变量,用于在pod中的容器设置环境变量。
# 创建Pod
kubectl create -f pod-env.yaml​
# 进入容器,输出环境变量kubectl exec pod-env -n mk -c tomcat -it /bin/shecho $jdkVersionecho $tomcatVersion

这种方式不是很推荐,推荐将这些配置单独存储在配置文件中。

五、端口设置

容器的端口设置containers的ports选项。

ports支持的子选项:

kubectl explain pod.spec.containers.ports
KIND:     Pod
VERSION:  v1
RESOURCE: ports <[]Object>
FIELDS:name         <string>  # 端口名称,如果指定,必须保证name在pod中是唯一的     containerPort<integer> # 容器要监听的端口(0<x<65536)hostPort     <integer> # 容器要在主机上公开的端口,如果设置,主机上只能运行容器的一个副本(一般省略) hostIP       <string>  # 要将外部端口绑定到的主机IP(一般省略)protocol     <string>  # 端口协议。必须是UDP、TCP或SCTP。默认为“TCP”。

创建pod-ports.yaml

apiVersion: v1
kind: Pod
metadata:name: pod-portsnamespace: mklabels:owner: mk
spec:containers:- name: tomcatimage: tomcat:lastestports: # 设置容器暴露的端口列表- name: tomcat-portcontainerPort: 8080protocol: TCP
# 创建Pod
kubectl create -f pod-ports.yaml
​
# 查看pod
kubectl get pod pod-ports -n mk -o yaml

访问容器中的程序需要使用的是PodIP:containerPort

六、资源配额

容器中的程序要运行,肯定是要占用一定资源的,比如cpu和内存等,如果不对某个容器的资源做限制,那么它就可能吃掉大量资源,导致其它容器无法运行。针对这种情况,kubernetes提供了对内存和cpu的资源进行配额的机制,这种机制主要通过resources选项实现,他有两个子选项:

  • limits:用于限制运行时容器的最大占用资源,当容器占用资源超过limits时会被终止,并进行重启

  • requests :用于设置容器需要的最小资源,如果环境资源不够,容器将无法启动

可以通过上面两个选项设置资源的上下限。

接下来,编写一个测试案例,创建pod-resources.yaml

apiVersion: v1
kind: Pod
metadata:name: pod-portsnamespace: mklabels:owner: mk
spec:containers:- name: tomcatimage: tomcat:lastestresources: # 资源配额limits:  # 限制资源(上限)cpu: "2" # CPU限制,单位是core数memory: "10Gi" # 内存限制requests: # 请求资源(下限)cpu: "1"  # CPU限制,单位是core数memory: "100Mi"  # 内存限制

在这对cpu和memory的单位做一个说明:

  • cpu:core数,可以为整数或小数

  • memory: 内存大小,可以使用Gi、Mi、G、M等形式

# 运行Pod
kubectl create  -f pod-resources.yaml
​
# 查看发现pod运行正常
kubectl get pod pod-resources -n dev# 接下来,停止Pod
kubectl delete  -f pod-resources.yaml
​
# 编辑pod,修改resources.requests.memory的值为10Gi
vim pod-resources.yaml
​
# 再次启动pod
kubectl create  -f pod-resources.yaml
​
# 查看Pod状态,发现Pod启动失败
kubectl get pod pod-resources -n mk -o wide​
# 查看pod详情会发现,如下提示
kubectl describe pod pod-resources -n mk
......
Warning  FailedScheduling  55s   default-scheduler  0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 Insufficient memory.(内存不足)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NOI.AC-积木【堆】

正题 题目链接:http://noi.ac/contest/266/problem/794 题目大意 无限多个1∗21*21∗2的砖块交替着 一个砖块会掉落仅当下方两个砖块都掉落&#xff0c;现在抽出nnn个砖块&#xff0c;求掉落多少个砖块。 解题思路 开一个优先队列&#xff0c;若两个连在一起的就把上面那个…

L3-002 堆栈 树状数组+二分答案

题目详情点击这里 思路&#xff1a;用std::stack来表示题目中说的栈&#xff0c;现在关键问题就是如何找到中位数。 可以用二分答案&#xff0b;树状数组的方法 由于每个元素最大不超过1e5&#xff0c;因此开一个大小为1e5的树状数组来存储不超过x的数有多少个 每次push一个…

K8S Learning(11)——Pod生命周期

一、Pod生命周期 一般将pod对象从创建至终的这段时间范围称为pod的生命周期&#xff0c;它主要包含下面的过程&#xff1a; pod创建过程 运行初始化容器&#xff08;init container&#xff09;过程 运行主容器&#xff08;main container&#xff09; 容器启动后钩子&#…

大规模开发团队如何实现DevOps转型? 来自微软全球开发平台工程团队的实践经验

微软全球开发平台工程团队从敏捷到DevOps的转型2013年11月13日&#xff0c;我们宣布了Visual Studio2013&#xff0c;以及微软研发云Visual Studio Online (VSO)的正式商用。紧接着我们经历了一次长达七小时的服务中断。我们的服务运行在一个“弹性扩展单元”中&#xff0c;为大…

NOI.AC-保镖【贪心,对顶堆】

正题 题目链接:http://noi.ac/contest/266/problem/795 题目大意 nnn个人第iii个巡逻一次aia_iai​秒&#xff0c;休息至少bib_ibi​秒。 要求 任意时刻都有人巡逻在一个人的两次相邻的巡逻直接不能有另一个人巡逻两次。 解题思路 对于性质二我们发现就是在nnn个人里选择最少…

L2-013 红色警报 并查集

题目连接 题解&#xff1a;连通块问题显然要与并查集有关&#xff0c;而且C4比赛极喜欢出与并查集有关的知识。 这道题可以这样做&#xff0c;即我每次去掉一个城市的时候&#xff0c;都对剩余的城市重新建立并查集&#xff0c;然后判断联通块的数量有没有删减&#xff0c;如…

野鸡NOI.AC模拟赛【2019.10.26】

前言 截止至2019.10.2614:222019.10.26\ \ \ \ 14:222019.10.26 14:22 成绩 正题 T1:NOI.AC−T1:NOI.AC-T1:NOI.AC−序列【堆】 https://blog.csdn.net/Mr_wuyongcong/article/details/102755906 T2:NOI.AC−T2:NOI.AC-T2:NOI.AC−积木【堆】 https://blog.csdn.net/Mr_wu…

Golang的CSP很酷?其实.NET也可以轻松完成

CSP&#xff08;Communicating sequential processes&#xff09;这东西我一开始以为很简单&#xff0c;后面差了资料发现它独树一帜&#xff0c;自己是一门语言&#xff0c;也是一套理论。这边我不深入的对它做过多的见解&#xff0c;我怕耽误大家_&#xff0c;大家可以看看wi…

K8S Learning(12)——Pod调度

一、Pod调度 在默认情况下&#xff0c;一个Pod在哪个Node节点上运行&#xff0c;是由Scheduler组件采用相应的算法计算出来的&#xff0c;这个过程是不受人工控制的。但是在实际使用中&#xff0c;这并不满足的需求&#xff0c;因为很多情况下&#xff0c;我们想控制某些Pod到…

jzoj3801-[NOIP2014模拟8.23]骰子【数学期望】

正题 题目链接:https://jzoj.net/senior/#main/show/3801 题目大意 mmm面的骰子是1∼m1\sim m1∼m&#xff0c;然后丢nnn次&#xff0c;求最大值的数学期望。 解题思路 若抛到的数都≤i\leq i≤i那么期望概率就是(1i)n(\frac{1}{i})^n(i1​)n 我们考虑若iii是最大值时概率就是…

L2-016 愿天下有情人都是失散多年的兄妹 CCCC

呵呵。大家都知道五服以内不得通婚&#xff0c;即两个人最近的共同祖先如果在五代以内&#xff08;即本人、父母、祖父母、曾祖父母、高祖父母&#xff09;则不可通婚。本题就请你帮助一对有情人判断一下&#xff0c;他们究竟是否可以成婚&#xff1f; 输入格式&#xff1a; 输…

SpringBoot2.1.9 多MongoDB配置自动扫描

一、配置文件 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> application.yml spring:application:name: double-mongoprofiles:active…

SignalR Core尝鲜

要点SignalR Core改用Microsoft.AspNetCore.Sockets&#xff0c;不再依赖HTTP。使用MessagePack序列化格式&#xff0c;支持二进制协议。TypeScript客户端移除了第三方依赖包。支持WebSocket原生客户端&#xff0c;可以使用自己构建的客户端连接到SignalR服务器。伸缩方式更灵活…

2016陕西省ACM省赛 HE 字符串处理 删除注释

HE 发布时间: 2017年3月27日 18:28 最后更新: 2017年3月27日 18:30 时间限制: 1000ms 内存限制: 256M 描述 "Hi there, my name is HE." 在某个秘密的计算机实验室中&#xff0c;超级人工智能计算机 HE 诞生了。 HE 可以在网络中搜索合适的程序代码进行自我升级…

SpringBoot2.1.9 MongoDB逻辑操作

一、基础类配置 NoRepositoryBean public interface IMongoRepository<T, ID> extends MongoRepository<T, ID> {String getTableName();void deleteAll(Collection<ID> ids);MongoOperations getMongoOperations();MongoEntityInformation<T, ID> ge…

牛客-Forsaken喜欢独一无二的树【并查集,最小生成树】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1221/H 题目大意 给一张图&#xff0c;要求删掉一些边使得最小生成树权值不变&#xff0c;然后求删掉的边的最小权值。 解题思路 我们假设能够构成最小生成树的边权之和为sumsumsum&#xff0c;最小生成树的边权之和为kk…

2016陕西省ACM 热身体B 种类并查集

Energy 发布时间: 2017年3月27日 11:31 最后更新: 2017年3月27日 18:30 时间限制: 1000ms 内存限制: 256M 描述 人类准备发射载人飞船前往火星。 飞船使用了一种特殊的反物质燃料来作为动力&#xff0c;在飞船的制造期间&#xff0c;同时人类也在从宇宙 的各个地方收集这…

P2519-[HAOI2011]problem a【dp】

正题 题目链接:https://www.luogu.org/problem/P2519 题目大意 nnn个人&#xff0c;第iii个人说aia_iai​个人比他高&#xff0c;bib_ibi​个人比他低&#xff0c;允许有相同分数&#xff0c;求最少多少人在说谎。 解题思路 我们改为求最多有多少人在说真话&#xff0c;我们发…

kubernetes实践之运行aspnetcore webapi微服务

1、预备工作unbuntu 16.04 or abovedocker for linuxkubernetes for linux 集群环境2、使用vs2017创建一个web api应用程序&#xff0c;并打包镜像到本地。3、推送本地镜像到docker hub4、编写k8s资源配置文件(yml)hello-world-deployment.yml如下上面replicas部署两个副本实例…

2016陕西省省赛 ACM Rui and her functions B 二分

Rui and her functions 发布时间: 2017年3月27日 15:45 最后更新: 2017年3月28日 12:43 时间限制: 10000ms 内存限制: 256M 描述 Rui is magnificently gifted. Why does she not play with me tonight? Oh, she is obsessing about nfunctions with nquartette of posi…