从集群外访问k8s的pod 的几种方式--hostNetwork
前言
有5种方法可以让集群外访问运行在Kubernetes集群上的应用程序(pod)。接下来我们 详细讨论Kubernetes的hostNetwork,hostPort,NodePort,LoadBalancer和Ingress功能。本章内容主要解读一下hostNetwork。
hostNetwork
demo
hostNetwork设置适用于Kubernetes pod。当pod配置为hostNetwork:true时,在此类pod中运行的应用程序可以直接查看启动pod的主机的网络接口。配置为侦听所有网络接口的应用程序,又可以在主机的所有网络接口上访问。以下是使用主机网络的pod的示例定义:
apiVersion: v1 kind: Pod metadata: name: influxdb spec: hostNetwork: true containers: - name: influxdb image: influxdb
您可以使用以下命令启动pod:
$ kubectl create -f influxdb-hostnetwork.yml
您可以检查InfluxDB应用程序是否正在运行:
$ curl -v http://kubenode01.example.com:8086/ping
剖析
当pod 设置hostNetwork: true时候,Pod中的所有容器就直接暴露在宿主机的网络环境中,这时候,Pod的PodIP就是其所在Node的IP。
对于同Deployment下的hostNetwork: true启动的Pod,每个node上只能启动一个。也就是说,Host模式的Pod启动副本数不可以多于“目标node”的数量,“目标node”指的是在启动Pod时选定的node,若未选定(没有指定nodeSelector),“目标node”的数量就是集群中全部的可用的node的数量。当副本数大于“目标node”的数量时,多出来的Pod会一直处于Pending状态,因为schedule已经找不到可以调度的node了。
以下示例中,集群只有4个node,当设置副本数量为5时,最后一个Pod状态会一直处于Pending状态。
root@k8s-master yaml]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE test-host-1108333573-11wbl 1/1 Running 0 17s 10.0.251.153 k8s-node-1 test-host-1108333573-2k35s 1/1 Running 0 17s 10.0.251.146 k8s-node-3 test-host-1108333573-lnlpy 1/1 Running 0 17s 10.0.251.222 k8s-node-4 test-host-1108333573-t6izr 1/1 Running 0 17s 10.0.251.155 k8s-node-2 test-host-1108333573-tf4mc 0/1 Pending 0 17s <none>
当多个host模式deployment的端口冲突的时候,最后启动的那些Pod就会一直处于Pending状态。
PS
请注意,每次重新启动pod时,Kubernetes都可能将pod重新安排到其他节点上,因此应用程序的IP地址将更改。除此之外,需要相同端口的两个应用程序不能在同一节点上运行。当群集上运行的应用程序数量增加时,这可能会导致端口冲突。由于这些原因,主机网络不是使您的应用程序可以从群集外部访问的好方法。
主机网络在那些方面有用那?
- 对于需要直接访问主机网络的情况。例如,可以将Kubernetes网络插件Flannel部署为在Kubernetes集群的所有节点上设置的守护进程。由于hostNetwork:true,Flannel完全控制集群中每个节点上的网络,允许它管理与hostNetwork:false的pod连接到的覆盖网络。
- 因为每个node上只能启动一个同deployment的pod,通过该特性,在某种程度上可以实现同一应用的pod不部署在同一台主机的需求。但是我更倾向于使用之前文章介绍过的pod的反亲和性来解决。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
k8s与CICD--drone简介和部署
前言 整个基于k8s的pass平台,关键的一部分就是CICD。CICD又是devops的关键部分。之前主流的工具是Jenkins。今天主要介绍的是drone。drone用go语言实现的,drone是前google员工2013年开源的一个CI/CD工具,现在已经拉了投资商业 化了。企业版是付费的,我们用的是免费版本。drone更新比较快,之前稳定版本是0.7,今天部署的时候已经更新到0.8了。不过相关的文档不完善,很多都是coming soon。 优势: drone引入pipline的概念,整个build过程由多个stage组成,每一个stage都是docker。 各stage间可以通过共享宿主机的磁盘目录, 实现build阶段的数据共享和缓存基础数据, 实现加速下次build的目标 各stage也可以共享宿主机的docker环境,实现共享宿主机的docker image, 不用每次build都重新拉取base image,减少build时间 可以并发运行。多个build可以并发运行,单机并发数量由服务器cpu数决定。 由开发者负责打包image和流程控制。Docker-in-docke...
- 下一篇
浅谈k8s+docker 资源监控
写在前面 最近在研究docker集群(kubernetes)的监控,为了彻底弄清楚, 简单看了一点源码。这里分享一下我学到的东西。 docker api: stats 首先是docker的api,stats的具体使用场景如: http://$dockerip:2375/containers/$containerid/stats 可以获取docker机器上某一个容器的状态,该请求的response会持续的写响应报文回来(每秒一次) http://$dockerip:2375/containers/$containerid/stats?stream=false 参数stream默认是true,设为false后,response只写一次。 docker中该api对应的操作,就相当于docker stats $CID 这条命令,它调用到了ContainerStats()方法(位于docker项目目录的/daemon/stats.go 第19行),函数中启动了一个收集器: daemon.SubscribeToContainerStats(name) 收集器定时写数据到update变量中。 然后启...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16