手机版
位置:筑能财经 > 滚动 >

kubernetes就绪探针使用

来源:腾讯云 | 2023-04-29 20:36:02

假设我们有一个应用程序,它需要一段时间来初始化并准备好接收流量。我们可以使用就绪探针来确保容器已准备好接收流量后才将其暴露给外部服务。


(相关资料图)

我们首先创建一个Deployment对象来运行应用程序。Deployment对象将自动创建一个副本集(ReplicaSet),并在其中运行指定数量的Pod。我们将使用nginx镜像作为应用程序的示例。

apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx-deploymentspec:  replicas: 3  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx-container        image: nginx        ports:        - containerPort: 80        readinessProbe:          httpGet:            path: /            port: 80

在上面的示例中,我们创建了一个名为nginx-deployment的Deployment对象,并指定了需要运行3个Pod副本。每个Pod都运行一个名为nginx-container的容器,该容器使用nginx镜像,并在80端口上监听流量。我们还将就绪探针配置为使用httpGet方法,向容器的/路径发送HTTP GET请求来检查容器是否已准备好接收流量。

我们可以通过kubectl命令检查Deployment的状态:

kubectl get deployment nginx-deployment

输出应该类似于:

NAME               READY   UP-TO-DATE   AVAILABLE   AGEnginx-deployment   3/3     3            3           10s

上面的输出显示了Deployment中有3个Pod副本,所有的副本都已准备好,可以接收流量。

接下来,我们可以创建一个Service对象来暴露Deployment中的Pod给外部服务。Service对象将使用负载均衡器将流量分配给Deployment中的Pod。

apiVersion: v1kind: Servicemetadata:  name: nginx-servicespec:  selector:    app: nginx  ports:  - protocol: TCP    port: 80    targetPort: 80  type: LoadBalancer

在上面的示例中,我们创建了一个名为nginx-service的Service对象,它将负责将流量分配给Deployment中的Pod。我们将type属性设置为LoadBalancer,这将自动为Service对象创建一个外部负载均衡器。

我们可以通过kubectl命令检查Service对象的状态:

kubectl get service nginx-service

输出应该类似于:

NAME           TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGEnginx-service  LoadBalancer   10.0.111.157  203.0.113.10  80:30549/TCP   10s

上面的输出显示了Service对象的一些基本信息,包括CLUSTER-IP、EXTERNAL-IP和端口信息。

现在,我们可以使用EXTERNAL-IP和端口信息来访问我们的应用程序。但在我们开始访问应用程序之前,我们需要确保它已准备好接收流量。我们可以使用kubectl describe命令来检查Pod的状态:

kubectl describe pod 

输出应该类似于:

Name:           nginx-deployment-7d6ff77df6-f7m6kNamespace:      defaultPriority:       0Node:           minikube/192.168.99.107Start Time:     Mon, 31 May 2021 16:10:53 +0300Labels:         app=nginx                pod-template-hash=7d6ff77df6Annotations:    Status:         RunningIP:             172.17.0.4IPs:            Controlled By:  ReplicaSet/nginx-deployment-7d6ff77df6Containers:  nginx-container:    Container ID:   docker://3d7df1c0d93fc7e97467a35c2e82d26134b6bfbca6f9cb6d82e57e65dcb61990    Image:          nginx    Image ID:       docker-pullable://nginx@sha256:95202e0d007bbd2edcad2b8eae1d2e6966efadfca6b7c6f9e57d71d06ef42b6f    Port:           80/TCP    Host Port:      0/TCP    State:          Running      Started:      Mon, 31 May 2021 16:11:05 +0300    Ready:          False    Restart Count:  0    Readiness:      http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3    Environment:        Mounts:      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-vh2lm (ro)Conditions:  Type           Status  Initialized    True   Ready          False   ContainersReady  False   PodScheduled   True Volumes:  kube-api-access-vh2lm:    Type:                    Projected (a volume that contains injected data from multiple sources)    TokenExpirationSeconds:  3607    ConfigMapName:           kube-root-ca.crt    ConfigMapOptional:           DownwardAPI:             trueQoS Class:                   BestEffortNode-Selectors:              Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300sEvents:  Type    Reason     Age   From               Message  ----    ------     ----  ----               -------  Normal  Scheduled  47s   default-scheduler  Successfully assigned default/nginx-deployment-7d6ff77df6-f7m6k to minikube  Normal  Pulled     45s   kubelet            Container image "nginx" already present on machine  Normal  Created    45s   kubelet            Created container nginx-container  Normal  Started    45s   kubelet            Started container nginx-container

输出显示了Pod中的nginx容器的状态。我们可以看到,容器的Readiness状态为False,这意味着它还没有准备好接收流量。我们还可以看到,容器的Readiness状态为False,这意味着它还没有准备好接收流量。我们还可以看到Readiness探针的详细信息,它会定期调用容器的/healthz端点以检查容器是否已准备好接收流量。

在这种情况下,我们的Readiness探针定义了一个HTTP GET请求,它将在容器的80端口上调用/healthz端点。如果该请求成功,则容器被认为是“就绪”的。

现在我们需要添加一个就绪探针来确保容器已准备好接收流量。在Kubernetes中,我们可以使用以下方式定义就绪探针:

HTTP GET探针:向容器发送一个HTTP GET请求,以检查容器是否已准备好接收流量。TCP Socket探针:尝试连接到容器的指定端口,以检查容器是否已准备好接收流量。Exec探针:在容器中执行指定的命令,并检查命令的退出状态以确定容器是否已准备好接收流量。

在本例中,我们将使用HTTP GET探针。下面是一个包含就绪探针的更新后的Pod定义:

apiVersion: v1kind: Podmetadata:  name: nginx  labels:    app: nginxspec:  containers:  - name: nginx    image: nginx    ports:    - containerPort: 80    readinessProbe:      httpGet:        path: /healthz        port: 80      initialDelaySeconds: 5      periodSeconds: 10

在这个更新的Pod定义中,我们添加了一个名为readinessProbe的字段,并在其中定义了HTTP GET探针。探针将在容器的80端口上调用/healthz端点,并在初始延迟5秒后每10秒执行一次。

现在,我们使用kubectl apply命令将更新的Pod定义应用于Kubernetes集群:

kubectl apply -f pod.yaml

如果我们再次运行kubectl describe pod命令,我们应该看到容器的Readiness状态已更改为True:

Name:           nginxNamespace:      defaultPriority:       0Node:           minikube/192.168.99.107Start Time:     Mon, 31 May 2021 16:10:53 +0300Labels:         app=nginxAnnotations:    Status:         RunningIP:             172.17.0.4IPs:            Controlled By:  Containers:  nginx:    Container ID:   docker://d96f8e1536c5feca2d79bfb13aebc5e47e5a6c5dd5d5b68a904a8110e32fbaec    Image:          nginx    Image ID:       docker-pullable://nginx@sha256:95202e0d007bbd2edcad2b8eae1d2e6966efadfca6bf772bd0eeb695c2d17c5b    Port:           80/TCP    Host Port:      0/TCP    State:          Running      Started:      Mon, 31 May 2021 16:11:04 +0300    Ready:          True    Restart Count:  0    Readiness:      http-get http://:80/healthz delay=5s timeout=1s period=10s #success=1 #failure=3    Environment:        Mounts:      /var/run/secrets/kubernetes.io/serviceaccount from default-token-x4rrz (ro)Conditions:  Type              Status  Initialized       True   Ready             True   ContainersReady   True   PodScheduled      True Volumes:  default-token-x4rrz:    Type:        Secret (a volume populated by a Secret)    SecretName:  default-token-x4rrz    Optional:    falseQoS Class:       BestEffortNode-Selectors:  Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300sEvents:          

现在我们可以确认容器已经准备好接收流量,Readiness探针定期调用/healthz端点以确保容器仍然是就绪的。

标签:

精彩放送

新闻资讯

  1. 环球今日报丨五一凭“食”力约会,杭州大厦LSE环球美食节火热进行中
  1. 报道:九层皮树风水上有什么讲究_九层皮树
  1. 苏宁易购一季度归母净亏损10.06亿元 同比减亏90.22%
  1. *ST长方:本次计提资产减值准备合计约7669万元 天天微头条
  1. 第三届奥运会参赛国家有几个(首届军运会参赛国家有几个)
  1. 越狱兔1-5季全集中文_越狱兔1 5季
  1. 环球热文:高频PIV系统_关于高频PIV系统简述
  1. 剑指中乙!上海长宁三菱重工飞狮队出征中冠联赛
  1. 世茂股份2022年营业收入57.47亿元 房地产租赁收入14.47亿元 环球滚动
  1. 明月清风晓星尘全诗及意思_明月清风晓星尘全诗 世界今日讯
  1. 2023年4月北京通州公租房选房流程(时间+地点+材料) 最新
  1. 林允儿男友是中国人_林允儿男友
  1. 送女生生日送什么礼物好_10个有创意的生日礼物
  1. 【环球时快讯】甲公司是一家制造业企业_哪些公司属于制造业
  1. 2020年小麦收割时间_小麦什么时间收割
  1. 微头条丨亚泰集团:2023年一季报净利润发生亏损
  1. 小八卦,白鹿,许凯,周也
  1. 聚焦主业,坚定开拓,福田谋求高质量发展的“加速度”
  1. 埃斯顿: 关于第三期股权激励计划限制性股票第三个解除限售期解除限售条件成就的公告 热讯
  1. 环球热文:飞阅深圳·各区联播丨这个五一!深圳各区活动多多→
  1. “跟风”开淄博烧烤,赚了还是赔了?|天天日报
  1. 热讯:郑氏点银:黄金不停多空杀无延续,原油顺势方向延续看跌
  1. 万科A:一季度净利润同比增长1.16%
  1. 俗话说世界上没有相同的两片叶子_谁说的世界上没有两片相同的叶子
  1. 当前聚焦:ST嗨德2022年亏损128.51万同比亏损减少 成本大幅下降
  1. 全球热资讯!像极了爱情舞蹈-像极了爱情
  1. 世界信息:关公解签大全查询100签_解签大全查询19
  1. 打造制造与服务融通发展样板,东莞启动服务型制造梯度培育计划 每日快讯
  1. 《演灭》全新宣传影片!亮相哔哩哔哩高能电玩节
  1. 每日头条!畅游普洱·悠享五一|普洱文旅携手中国移动推出“五一”惠游礼包
  1. 【天天新要闻】克苏鲁神话疯狂低语官网在哪下载 最新官方下载安装地址
  1. 【环球速看料】北方华创:一季度净利润5.9亿元 同比增长186.58%
  1. 【独家焦点】我谨代表怎么使用_我谨代表
  1. 大化瑶族自治县人大到我县考察学习 当前快播
  1. 苹果id账号的格式是什么样的(id账号格式是什么样子的)-天天通讯
  1. 净利断层(下)
  1. 西法德三国官员会面 批准未来空战系统合作协议 焦点观察
  1. 继续加码中国!GE医疗独立上市后首次升级中国战略,国产销售占比超过70% 世界百事通
  1. 河南科技大学专升本录取分数线历年_河南科技大学专升本
  1. 北影节时间丨华夏电影黄群飞:从政策层面解决电影投资的不确定性_天天看点
  1. 能链智电发布碳减排数据:2022年碳减排超184万吨,同比提升106%_全球头条
  1. 零跑汽车:一季度收益14.425亿元,同比减少28%
  1. 天天视点!“五一”假期,天津有一大波公园上新!
  1. 冷!预计明早清晨,中卫最低气温在0~3℃,并有轻霜冻-观速讯
  1. 丁烈云院士与武汉理工大学师生共话“复合型智能建造创新人才”培养
  1. 远洋椿萱茂树立养老专业标准,多房企加速布局朝阳产业|环球视讯
  1. 盘点22年煤炭股数据|当前热文
  1. iphone的itunes怎么用啊_苹果手机itunes怎么用_通讯
  1. 环球资讯:大全能源跌5.91% 某券商在其最高点给予跑赢行业评级
  1. 世界今热点:为什么PDF打印不清晰 为什么pdf打印不
  1. 【新华财经调查】辽沈银行去年置换257亿高息存款 历史包袱仍致29亿亏损
  1. 中淳高科冲击沪主板,存货账面价值较大,主营业务毛利率存波动_天天最资讯
  1. 厦工股份(600815)3月31日股东户数3.99万户,较上期减少0.62%
  1. 当前信息:华为2023年一季度营收1321亿元 同比增长0.8%
  1. “五一”期间 遂宁站加开攀枝花到达州列车
  1. 2023武汉五一适合带小孩玩的爬山点推荐 世界微头条
  1. 珠江东西两岸融合发展步入“快车道” 产业“软联通”走深走实
  1. 【全球新视野】绥中县气象局发布大风蓝色预警【Ⅳ级/一般】【2023-04-28】
  1. 朱元璋找茬赐死冯胜、傅友德_环球速讯
  1. 劳模请注意,五一假期在武汉天河机场乘机有专属服务
  1. 世界速读:强劲复苏!三年新高!
  1. 幻灯片打印怎么去掉右上角的日期_幻灯片一面打印多页 热点聚焦
  1. 怀孕可以吃龙眼吗_怀孕可以吃凤梨吗
  1. 信息:重庆高精建筑劳务有限公司因违规高处作业被罚款8000元
  1. 新天然气2023年首季营业利润率44.40%保持稳定
  1. 大邑刘氏庄园博物馆2023五一有什么活动
  1. 莲花健康股东户数减少609户,户均持股7.7万元 天天播资讯
  1. 苏州查不孕 宫颈癌早期症状可以*吗
  1. 横琴国际仲裁中心、横琴国际商事调解中心揭牌|每日看点
  1. 中国银河:给予上海医药买入评级,目标价位31.32元_播报
  1. 【时快讯】忍者日
  1. 世界短讯!今年一季度国有企业主要效益指标保持增长
  1. 世界最资讯丨首次参加斯诺克世锦赛就打进四强 斯佳辉能成为又一位“小辉”吗
  1. 全球百事通!6%!专业机构预测今年社会消费品零售将实现稳健增长
  1. 热讯:毛利率同比回升,经营有望逐步修复
  1. 美国濒海战斗舰下水时撞船,“鸡肋”军舰命运坎坷,地位非常尴尬
  1. 开局首季!看中国经济“成绩单”| 增资加码 分享中国发展红利
  1. PHP面向对象-访问控制-天天信息
  1. 世界今热点:歌力思去年主营收入创新高 今年首季为全年业绩恢复打下基础
  1. 拉什福德:失望没有带着胜利离开,需要专注接下来的重要比赛
  1. 当前播报:全球连线|外国青年导演用镜头探寻乡土中国
  1. 重要提醒!“五一”期间这些公园景区部分日期已约满 这些车站封闭
  1. 世界热头条丨lsc监控软件_lsc局域网屏幕监控系统
  1. 再见字母哥,搭档哈登、恩比德!76人、快船、雄鹿酝酿三方交易?
  1. 实时焦点:1121.5万人次!铁路“五一”小长假首日数据出炉
  1. trailer翻译成中文_trailer
  1. 取个有个性的网名_有个性的网名
  1. 莘庄镇综合行政执法队开展小区环境治理工作
  1. 盐湖股份董秘回复:锂板块作为公司核心优势主业,公司围绕察尔汗盐湖超高镁锂比卤水提锂技术提升运用
  1. 崩坏星穹铁道当生意来敲门任务攻略流程
  1. 中经评论:更加重视消费增长可持续性
  1. 世界观焦点:明星齐聚上海红毯:肖战奇怪,舒淇倪妮也失策,段奕宏老好多不敢认
  1. 顺庆:开展“五一”节前特种设备安全专项整治-环球新视野
  1. 世界微动态丨无锡振华(605319):召开2022年年度股东大会的通知
  1. 渊亭独家:“闪电”换发-浅析美国F-35战斗机未来发动机升级计划_速看
  1. 便利5万人出行!亚洲第一箱型拱桥——剑河锡绣大桥技术创新推进施工-全球热闻
  1. 沙穆_关于沙穆的介绍
  1. 最新消息:2023当代小学生喜欢十大神曲
  1. 智能医院如何建?快来这里说-每日资讯
  1. 短讯!以可持续之心,塑自在生活之美 | 2023AWE展威能采访实录