pod实例数是什么意思_[灌水] Kubernetes In Action: Pod
Pod
pod 可以有多个 副本,比如 slave 实际上是 pod 的副本,单一的 pod 存在唯一的 node 上。
- IP 分配的单位, pod 容器共享
- pod 容器共享 volume, pod所有容器可以共享多个 docker 容器的 fs 下的 volume
- 同一个pod 容器可以共享 IPC UTS namespace
- pod 拥有属性 labels,key 独一无二,1当成是 map
pod 信息有:
- Shared storage, as Volumes
- Networking, as a unique cluster IP address
- Information about how to run each container, such as the container image version or specific ports to use
我们之前说过, pod 类似逻辑主机, 在逻辑主机中运行的进程共享诸如 CPU 、 RAM、 网络接口等资源。 入们会期望进程也能共享磁盘, 但事实并非如此。 需要谨 记 一 点, pod 中的每个容器都有自己独立的文件系统, 因为文件系统来自容器镜像。
pods
apiVersion: v1
kind: Pod # P 要大写
metadata:name: mwish-bot
spec:containers:- image: redisname: mredisports:- containerPort: 6379protocol: TCP
然后在这里可以:
kubectl create -f p.yaml
第一次 check 的时候:
➜ k8s kubectl get pods
NAME READY STATUS RESTARTS AGE
mwish-bot 0/1 ContainerCreating 0 55s
等镜像被拉下来就是 running 了。
➜ k8s kubectl get pods
NAME READY STATUS RESTARTS AGE
mwish-bot 1/1 Running 0 6m2s
(这个时候 docker ps 竟然没有,不科学?)
然后可以看 log:
mwish-bot 1/1 Running 0 6m2s
➜ k8s kubectl logs mwish-bot
1:C 08 Feb 2020 19:17:28.146 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 08 Feb 2020 19:17:28.146 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 08 Feb 2020 19:17:28.146 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 08 Feb 2020 19:17:28.153 * Running mode=standalone, port=6379.
1:M 08 Feb 2020 19:17:28.153 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 08 Feb 2020 19:17:28.154 # Server initialized
1:M 08 Feb 2020 19:17:28.155 * Ready to accept connections
开启端口转发之后,就可以连接了:
kubectl port-forward mwish-bot 6379:6379
然后:
redis-cli
可以操作。
我们可以拿到标签:
➜ k8s kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
mwish-bot 1/1 Running 0 10m <none>
加上标签之后可以根据标签过滤:
➜ k8s kubectl get pods -L env
NAME READY STATUS RESTARTS AGE ENV
mwish-bot 1/1 Running 0 25s prod
对于pod 还有 ns:
➜ k8s kubectl get po --namespace kube-system
NAME READY STATUS RESTARTS AGE
coredns-d5947d4b-cxp4s 1/1 Running 1 38h
coredns-d5947d4b-czpwz 1/1 Running 1 38h
etcd-minikube 1/1 Running 0 38h
kube-addon-manager-minikube 1/1 Running 0 38h
kube-apiserver-minikube 1/1 Running 0 38h
kube-controller-manager-minikube 1/1 Running 0 38h
kube-proxy-jcvd4 1/1 Running 0 38h
kube-scheduler-minikube 1/1 Running 0 38h
storage-provisioner 1/1 Running 0 38h
- ns
- selector
- 你可以给固定节点打 tag
你可以用来给 node 打 tag, 比如 gpu = true
, 便于调度。
Probe
用于检测。其实你可以看看 redis 的 k8s-yaml
实际上有个 livenessProbe,例如:
https://github.com/spotahome/redis-operator/blob/89d5715fe74842e81b870ed6522949316a08dcdf/operator/redisfailover/service/generator.go#L282
这里会让 redis cli 去 ping. 实际上应用 OOM 之类的可能容器还在,但是服务事实上是不可用的。可能有的还会在 http 上绑定 /health
ReplicaContoller
ReplicationController是一种Kubemetes资源,可确保它的pod始终保持运行状态。 如果pod因任何原因 消失(例如节点从集群中消失或由于该pod已从节点中逐出), 则ReplicationController 会注意到缺少了pod并创建替代pod。
- 对于没有 rc 甚至什么都没有的, node 挂了就真的挂了
- 有托管的话,会创建一个新的 replica.
ReplicationController会持续监控正在运行的pod列表, 并保证相应 ” 类型” 的 pod的数目与期望相符。 如正在运行的pod太少, 它会根据pod模板创建新的副本。 如正在运行的pod太多, 它将删除多余的副本。
ReplicationController 不是根据pod类型来执行 操作的, 而是根据pod是否匹配某个标签选择器(前 一 章 中了解了它们)。
包括的内容有:
- label selector
- count
- pod template
它能:
- 确保 一 个 pod (或多个 pod 副本)持续运行, 方法是在现有 pod 丢失时启动 一 个新 pod。
- 集群节点发生故障时, 它将为故障节 点 上运 行的所有 pod (即受 ReplicationController 控制的节点上的那些 pod) 创建替代副本。
- 它能轻松实现 pod的水平伸缩 手动和自动都可以(参见第 15 章中的 pod的水平自动伸缩)。
(pod 实例永远不会重新安置到另一个节点。 相反, ReplicationController 会 创建一个全新的 pod 实例, 它与正在替换的实例无关。)
可以通过 scale 等方式扩展 replica set.
下面我们创建了一个 ReplicationController:
➜ k8s cat p-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:name: rs-mwish-bot
spec:replicas: 3selector:app: mwish-bottemplate:metadata:labels:app: mwish-botspec:containers:- name: mwish-botimage: redisports:- containerPort: 6379
apply 之后可以 get pods :
➜ k8s kubectl get pods
NAME READY STATUS RESTARTS AGE
mwish-bot 1/1 Running 0 8m15s
rs-mwish-bot-fh8j8 1/1 Running 0 2m55s
rs-mwish-bot-q4ntt 1/1 Running 0 2m55s
让我们 delete 原来的 pod 吧:
➜ k8s kubectl get pods
NAME READY STATUS RESTARTS AGE
mwish-bot 1/1 Running 0 8m15s
rs-mwish-bot-fh8j8 1/1 Running 0 2m55s
rs-mwish-bot-q4ntt 1/1 Running 0 2m55s
➜ k8s kubectl delete pod mwish-bot
pod "mwish-bot" deleted
➜ k8s kubectl get pods
NAME READY STATUS RESTARTS AGE
rs-mwish-bot-5ld94 0/1 ErrImagePull 0 20s
rs-mwish-bot-fh8j8 1/1 Running 0 3m41s
rs-mwish-bot-q4ntt 1/1 Running 0 3m41s
➜ k8s
(为什么会 ErrImagePull...)
➜ k8s kubectl get pods
NAME READY STATUS RESTARTS AGE
rs-mwish-bot-5ld94 1/1 Running 0 50s
rs-mwish-bot-fh8j8 1/1 Running 0 4m11s
rs-mwish-bot-q4ntt 1/1 Running 0 4m11s
好了,恢复了。
我们看看 rc :
➜ k8s kubectl get rc
NAME DESIRED CURRENT READY AGE
rs-mwish-bot 3 3 3 5m7s
由于我们是按照标签来的,所以我们 overwrite 一下标签,有趣的就来了:
➜ k8s kubectl label pod rs-mwish-bot-5ld94 app=nmsl --overwrite
pod/rs-mwish-bot-5ld94 labeled
➜ k8s kubectl get pods
NAME READY STATUS RESTARTS AGE
rs-mwish-bot-5ld94 1/1 Running 0 7m35s
rs-mwish-bot-fh8j8 1/1 Running 0 10m
rs-mwish-bot-q4ntt 1/1 Running 0 10m
rs-mwish-bot-tvpr7 0/1 ContainerCreating 0 5s
下面我们再试试更改 scale, 你当然可以更新它的 yaml 文件,不过你更可以:
➜ k8s kubectl scale rc rs-mwish-bot --replicas=5
replicationcontroller/rs-mwish-bot scaled
➜ k8s kubectl get pods
NAME READY STATUS RESTARTS AGE
rs-mwish-bot-5ld94 1/1 Running 0 20m
rs-mwish-bot-fh8j8 1/1 Running 0 23m
rs-mwish-bot-nbtfr 0/1 ContainerCreating 0 6s
rs-mwish-bot-pvfg9 0/1 ContainerCreating 0 6s
rs-mwish-bot-q4ntt 1/1 Running 0 23m
rs-mwish-bot-tvpr7 1/1 Running 0 12m
kubectl delete 删除 ReplicationController 时, pod 也会被删除。 但是由于由 ReplicationController 创建的 pod 不是 ReplicationController 的组成部分, 只是由其进行管理, 因此可以只删除 ReplicationController 并保待 pod 运行
ReplicaSet 是 rc 的升级版,不是 v1 的一部分。提供了更强的选择器。但是目前我不介绍吧。ReplicationController 应该替换为 ReplicaSet 和 Deployment, 它们提供类似的功能和更强的能力。
DeamonSet
你可以看到现有的 DeamonSet:
➜ k8s kubectl get ns
NAME STATUS AGE
chaos-testing Active 23h
default Active 23h
kube-node-lease Active 23h
kube-public Active 23h
kube-system Active 23h
➜ k8s kubectl get ds
No resources found.
➜ k8s kubectl get ds -n kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-proxy 1 1 1 1 1 <none> 23h
local-volume-provisioner 1 1 1 1 1 <none> 23h
➜ k8s
• 执行批处理任务的 pod 应通过 Kubernetes Job 资源创建, 而不是直接或通过
ReplicationController 或类似对象创建。 • 需要在未来某个时候运行的 Job 可以通过 CronJob 资源创建。
Job 这几节我就简单看了下, 假设:
- 你有一个运行中的集群
- 你希望运行一个测试脚本
比如说我们希望对一个 tidb 的数据库集群跑 go-tpc https://github.com/pingcap/go-tpc:
FROM golang:alpine3.10 AS build_baseRUN apk add --no-cache gcc make bash git curlENV GO111MODULE=on
RUN mkdir /src
WORKDIR /src
COPY go.mod .
COPY go.sum .RUN go mod downloadCOPY . .RUN make buildFROM alpine:3.8RUN apk update && apk upgrade && apk add --no-cache bash curl wgetCOPY --from=0 /src/bin/* /bin/
这个时候,我们把这个 dockerfile 编译成镜像然后 push 到 http://docker.io 之后,可以写一个对应的 yaml 来描述 job:
apiVersion: batch/v1
kind: Job
metadata:name: run-go-tpcnamespace: mwish-1k-test
spec:template: metadata:name: run-go-tpcspec:containers:- name: run-go-tpcimage: mwish117/mwish-go-tpccommand: ["/bin/go-tpc", "tpcc", "-H", "10.23.255.222", "--warehouses", "1000", "-T", "200", "run"]restartPolicy: Never
它会创建一个 "${run-go-tpc}-${random}"
的名字, 然后运行这个 Job.
pod实例数是什么意思_[灌水] Kubernetes In Action: Pod相关推荐
- BZOJ_1601_[Usaco2008_Oct]_灌水_(最小生成树_Kruskal)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1601 有\(n\)个田地需要灌溉,每个田地可以自己引水,花费为\(w[i]\),或者连接其他被 ...
- redis stream持久化_[灌水] Redis 的持久化
关于 Redis 的 Persistence, 最好的入门材料应该是: 它有两种形式,AOF 和 RDB:RDB 相对来说是一个数据库的"snapshot",通过 SAVE 或者 ...
- 【Kubernetes系列】Pod
文章目录 概述 使用 Pod 管理 pod 的工作负载资源 Pod 管理多个容器 Pod的使用 Pod 操作系统 Pod 和控制器 Pod 模板 Pod 更新与替换 资源共享和通信 Pod 中的存储 ...
- 干货 | 数万实例数百TB数据量,携程Redis治理演进之路
作者简介 向晨,携程资深数据库工程师:布莱德,携程技术专家:皓月,携程技术培训生: 一.背景 携程自2013年开始使用Redis,旧时期为Memcached和Redis混用状态.由于Redis在处理性 ...
- 微信朋友圈python广告投了多少钱_朋友圈广告的评论区,当代人的灌水BBS
记者 | 马越 编辑 | 牙韩翔 1 如果你最近几天都忍住没发过朋友圈,也没给任何人点赞评论,却冷不防多了个小红点提醒--没错,八成是又有人收到Python的广告了. 6张不明所以的图片,加上20个字 ...
- plsql job执行多个存储过程_在Kubernetes的一个Pod内连续依次执行Container
出于某些目的,有时需要在Kubernetes的一个Pod中,连续依次运行多个Container. 这种有明确结束预期的运行,即Kubernetes的Job. 但是,虽然一个Job可以在一个Pod内运行 ...
- 计算机类sci四大水刊,材料灌水的sci期刊_十大水榜sci杂志_四大垃圾sci杂志
关于管理学方面的SCI收录期刊有哪些? chinese medical journal(CMJ) 文 介绍|投稿经验|EigenFactor new zealand journal of agricu ...
- 怎么绕过论坛回复_可怕,GPT3论坛跟帖灌水一周无人发现!专挑热搜,秒秒钟长文...
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI "我被绿了怎么办"."存款3000万的我仍然感到迷茫"."人在美国,刚下飞机" ...
- Kubernetes 中 Evicted pod 是如何产生的
线上被驱逐实例数据 最近在线上发现很多实例处于 Evicted 状态,通过 pod yaml 可以看到实例是因为节点资源不足被驱逐,但是这些实例并没有被自动清理,平台的大部分用户在操作时看到服务下面出 ...
最新文章
- 深入研究Java类加载机制
- 在windows下运行spark
- 光荣之路测试开发面试linux考题之四:性能命令
- 的底层实现 ios_iOS 面试梳理
- UE4手册中文翻译速查表
- 2016年4月计算机组成原理试题答案,全国2018年4月自考(02318)计算机组成原理试题及答案...
- MYSQL中group_concat有长度限制!默认1024(转载)
- 使用zabbix监控MongoDB
- 学习写 Makefile
- python numpy和pandas做数据分析时去掉科学记数法显示
- axure9怎么让页面上下滑动_Axure如何实现同页面上下、左右滑动
- android 会自动横屏再竖屏,Android横屏竖屏切换的问题
- 淘客基地教你如何推广淘客小程序
- SLAM综述阅读笔记四:A Survey on Deep Learning for Localization and Mapping: Towards the Age of Spatial 2020
- 【Mysql】留存率指标计算
- 解析CSS属性之pointer-events
- 中国大学慕课MOOC ,Shell测试答案
- response响应对象参数和方法是啥?怎么发送带请求头的请求(headers参数)怎么发送带参数的请求?cookieJar的转换方法是什么?
- 思科光交MDS9710绑定WWN并激活新的wwn
- PE文件之IMAGE_DOS_HEADER