前言
本篇是Kubernetes第九篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。
Kubernetes系列文章:
- Kubernetes介绍
- Kubernetes环境搭建
- Kubernetes-kubectl介绍
- Kubernetes-Pod介绍(-)
- Kubernetes-Pod介绍(二)-生命周期
- Kubernetes-Pod介绍(三)-Pod调度
- Kubernetes-Pod介绍(四)-Deployment
- Kubernetes-Service介绍(一)-基本概念
服务发现
Kubernetes提供两种客户端以固定方式获取后端访问地址的方式:环境变量和DNS方式。
环境变量
该实验以上文中的nginx-deployment.yaml和nginx-service.yaml为基础;
- 新建一个Pod资源,文件名为nginx-pod.yaml;
apiVersion: v1
kind: Pod
metadata:
name: nginx-deployment
spec:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
- 启动该资源;
kubectl apply -f nginx-pod.yaml
- 进入容器内部,查看系统的环境变量;
image.png
- 通过环境变量访问服务信息;
curl http://${NGINX_SERVICE_SERVICE_HOST}
image.png
DNS方式
- 通过DNS解析方式在容器内部访问;
curl http://nginx-service.default.svc.cluster.local
image.png
相比于环境变量来说,DNS域名格式的Service名称提供的稳定、不变的访问地址,可以简化客户端的应用配置,是Kubernetes推荐的方式。当Service以DNS形式进行访问的时候,需要在集群中存在一个DNS服务器来完成域名到ClusterIP的地址解析工作,kubeadm在初始化的时候已经完kube-dns的安装,这个里要注意一个问题,就是使用busybox解析Service时候,最新版本是有问题的,我采用了1.28.3版本,对于服务中心中是否安装kube-dns可以通过以下方式检查:
#检查deployment
kubectl get deployment --namespace=kube-system
#检查service
kubectl get services --namespace=kube-system
Service在Kubernetes中遵守DNS命名规范,Service的DNS域名表示方法为servicename.namespace.svc.clusterdomain,其中servicename为服务名称,namespace为所在的名空间,clusterdomain为Kubernetes中集群设置的域名后缀,此外如果Service定义中设置了名称,该端口会拥有一个DNS域名,在DNS服务器中保存格式为:_portname._protocol.servicename.namespace.svc.clusterdomain,其值为端口号的数值。
img
Pod的DNS相关特征
Pod作为集群中提供服务的实体,也可以设置DNS域名,Kubernetes为Pod使用的DNS策略提供很多种方式。
Pod的DNS
对于Pod来说,Kubernetes会为其设置一个pod-ip.namespace.pod.cluster-domain格式的DNS域名,其中Pod的IP需要使用-替换.,我们通过nslookup来证明一下;
- 查看Pod的IP信息,我们使用niginx-deployment的Pod为案例;
kubectl get pod -o wide
image.png
- 使用nslookup进行验证;
kubectl exec busybox -- nslookup 10-100-1-103.default.pod.cluster.local
image.png
对于Deployment和Daement类型的创建的Pod来说,Kubernetes会为每个Pod设置一个DNS域名,格式为pod-ip.deployment-name/daement-name.namespace.svc.cluster-domain,Pod的IP也需要使用-替换.
为Pod设置hostname和subdomain
当前,创建Pod时其主机名取自Pod的metadata.name,在定义Pod的yaml文件中包含一个可选的 hostname 字段,可以用来指定Pod的主机名。 当这个字段被设置时,它将优先于Pod的名字成为该 Pod 的主机名。此外还有一个字段subdomain 字段,可以用来指定 Pod的子域名。
- 删除所有Pod;
kubectl delete -f nginx-pod.yaml
- 创建busybox-headless-service.yaml文件,这里Headless Service与Pod子域名保持一致,这样子DNS服务器才会自动创建响应的DNS记录;
apiVersion: v1
kind: Service
metadata:
name: default-subdomain
spec:
selector:
name: busybox
clusterIP: None
ports:
- name: foo # 实际上不需要指定端口号
port: 1234
targetPort: 1234
- 创建nginx-pod.yaml文件;
apiVersion: v1
kind: Pod
metadata:
name: busybox1
labels:
name: busybox
spec:
hostname: busybox-1
subdomain: default-subdomain
containers:
- image: busybox:1.28.3
command:
- sleep
- "3600"
name: busybox
- 创建资源;
kubectl apply -f busybox-headless-service.yaml
kubectl apply -f busybox-pod1.yaml
- 进入Pod检查DNS是否写入,其他Pod就可以通过busybox-1.default-subdomain.default.svc.cluster.local来访问该Pod;
kubectl exec -it busybox1 -- /bin/sh
cat /etc/hosts
image.png
Pod的DNS策略
Kubernetes可以通过Pod中dnsPolicy属性指定DNS相关策略,目前支持以下四种策略:
-
Default: 继承Pod所在的节点的域名解析设置;
-
ClusterFirst: 优先使用Kubernetes提供的DNS服务(CoreDNS),将无法解析域名转发到系统配置的DNS服务器;
-
ClusterFirstWithHostNet:适用于以hostNetWork方式运行的Pod;
-
None:忽略Kubernetes提供的DNS配置,采用自定义的配置方式;
Pod自定义DNS配置
Kubernetes可以通过Pod的dnsConfig属性来自定义DNS相关配置,同时必须指定dnsPolicy为None。
自定义DNS可以在dnsConfig指定以下属性:
nameservers: 用于域名解析DNS服务列表,最多可以设置3个,当 Pod的dnsPolicy设置为none时, 列表必须至少包含一个 IP 地址。配置的nameserver列表与系统自动设置的nameserver自动合并去重;
searches: 用于域名搜索的DNS域名后缀,最多设置6个,也会与系统自动设置的search列表合并去重;
options:配置其他可选的DNS参数,以name或者name/value的形式表示,系统也会自动设置option列表合并去重;
随笔分类 - DevOps
摘要:前言 本篇是Kubernetes第十四篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)
阅读全文
posted @
2021-12-22 09:00 大魔王先生
阅读(130)
摘要:前言 本篇是Kubernetes第十三篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)
阅读全文
posted @
2021-12-15 08:58 大魔王先生
阅读(274)
摘要:前言 本篇是Kubernetes第十二篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)
阅读全文
posted @
2021-12-06 08:59 大魔王先生
阅读(222)
摘要:前言 本篇是Kubernetes第十一篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战,此篇文章概念比较多,后续我会继续出一些网络相关实战以及原理探索篇。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kuber
阅读全文
posted @
2021-12-01 08:59 大魔王先生
阅读(282)
摘要:前言 本篇是Docker第十三篇,Docker的使用至此就介绍完成,接下来继续Kubernetes。 Docker系列文章: 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网络上Docker单机网络下Docker单机网络
阅读全文
posted @
2021-11-26 08:58 大魔王先生
阅读(414)
摘要:前言 前面的文章主要聚焦于单机网络上,对于生产环境而言,单机环境不满足高可用的特点,所以是不具备上生产的条件,因此在开始Docker Swarm篇的时候我们先来聊聊多机网络之间Docker的通信如何做,厦门主要介绍三种跨主机通信的方式。 Docker系列文章: 为什么要学习DockerDocker基
阅读全文
posted @
2021-11-12 08:54 大魔王先生
阅读(297)
摘要:前言 在开始Kubernetes的网络之前我们先来学习Netfilter,Netfilter可能了解的人比较少,但是iptables用过 Linux的都应该知道。本文主要介绍Netfilter与iptables的原理。 什么是Netfilter Netfilter顾名思义就是网络过滤器,其主要功能就
阅读全文
posted @
2021-11-04 08:53 大魔王先生
阅读(170)
摘要:前言 本篇是Kubernetes第十篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)-
阅读全文
posted @
2021-10-20 08:52 大魔王先生
阅读(850)
摘要:前言 本篇是Kubernetes第九篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)-
阅读全文
posted @
2021-10-18 09:19 大魔王先生
阅读(220)
摘要:前言 本篇是Kubernetes第八篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。Pod篇暂时应该还缺少两篇,等Service和存储相关内容介绍以后,补充剩下的两篇,有状态的Pod会涉及这两块的内容。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建
阅读全文
posted @
2021-09-29 08:48 大魔王先生
阅读(396)
摘要:前言 本篇是Kubernetes第七篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)-
阅读全文
posted @
2021-09-26 08:54 大魔王先生
阅读(212)
摘要:前言 本篇是Kubernetes第六篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-)Kubernetes-Pod介绍(二)-
阅读全文
posted @
2021-09-22 08:49 大魔王先生
阅读(267)
摘要:前言 本篇是Kubernetes第五篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍Kubernetes-Pod介绍(-) Pod生命周期 Pod对象自从其创建开
阅读全文
posted @
2021-09-15 08:42 大魔王先生
阅读(196)
摘要:前言 本篇是Kubernetes第四篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。从现在开始都是重要的核心概念,此篇偏一些Pod的概念介绍,后续每篇都会有实战。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建Kubernetes-kubectl介绍
阅读全文
posted @
2021-09-08 08:39 大魔王先生
阅读(229)
摘要:前言 本篇是Kubernetes第三篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。本篇重要介绍kubectl的使用。 Kubernetes系列文章: Kubernetes介绍Kubernetes环境搭建 kubectl的核心功能在于通过 API Server 操作 Kubernetes
阅读全文
posted @
2021-09-06 08:50 大魔王先生
阅读(321)
摘要:前言 本篇是Kubernetes第二篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战。 Kubernetes系列文章: Kubernetes介绍 Kubernetes搭建方式介绍和对比 Minikube Minikube是一种可以在本地轻松运行Kubernetes的工具。Minikube在
阅读全文
posted @
2021-09-02 08:47 大魔王先生
阅读(543)
摘要:前言 从本周开始以后尝试开始每周两更,本篇原计划是Docker多机网路,该篇文章有些卡文,所以先更新篇Kubernetes文章,关于Docker系列文章后面应该就剩下两篇了,等后续Kubernetes使用篇讲完以后,再开始做一些Docker相关深层次思考。 Docker系列文章: 为什么要学习Doc
阅读全文
posted @
2021-08-18 08:47 大魔王先生
阅读(460)
摘要:前言 Docker系列文章: 此篇是Docker系列的第十一篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,马上就开始Kubernetes,加油!一起前行! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网
阅读全文
posted @
2021-08-12 08:49 大魔王先生
阅读(797)
摘要:前言 Docker系列文章: 此篇是Docker系列的第十篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,马上就开始Kubernetes,加油!一起前行! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网络
阅读全文
posted @
2021-08-06 08:56 大魔王先生
阅读(476)
摘要:前言 Docker系列文章: 此篇是Docker系列的第九篇,之前的文章里面或多或少的提到Docker的隔离技术,但是没有很清楚的去聊这个技术,但是经过这么多文章大家一定对Docker使用和概念有了一定的理解,接下来我们聊下底层一些技术,帮助大家解解惑,先从隔离技术开始吧。此外大家一定要按照我做的D
阅读全文
posted @
2021-07-30 09:23 大魔王先生
阅读(761)
摘要:前言 Docker系列文章: 此篇是Docker系列的第八篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网络上Docker单机网络下 基本命令 img
阅读全文
posted @
2021-07-21 08:50 大魔王先生
阅读(430)
摘要:前言 Docker系列文章: 此篇是Docker系列的第七篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷DockerfileDocker单机网络上 Docker网络初探 后台方式启动一个
阅读全文
posted @
2021-07-13 08:48 大魔王先生
阅读(557)
摘要:前言 Docker系列文章: 此篇是Docker系列的第六篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习DockerDocker基本概念Docker镜像基本原理Docker容器数据卷Dockerfile 网卡 网卡是一块计算机硬件。其特点是每一个网卡都有独立的MA
阅读全文
posted @
2021-07-09 08:55 大魔王先生
阅读(335)
摘要:前言 Docker系列文章: 此篇是Docker系列的第五篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习Docker Docker基本概念 Docker镜像基本原理 Docker容器数据卷 什么是DockerFile Dockfile是一种被Docker程序解释的
阅读全文
posted @
2021-06-28 08:47 大魔王先生
阅读(183)
摘要:前言 Docker系列文章: 此篇是Docker系列的第四篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习Docker Docker基本概念 Docker镜像基本原理 为什么需要容器数据卷 数据的持久化,假设MySQL的数据存储在自身的镜像当中,如果将镜像删除的话,
阅读全文
posted @
2021-06-21 09:26 大魔王先生
阅读(415)
摘要:前言 Docker系列文章: 如果没有安装过Docker请参考本文最后部分,大家从现在开始一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么学习Docker Docker基本概念 什么是镜像 镜像就是一个可执行独立运行的软件包。包含应用运行所必须的文件和依赖包; 镜像可以理解为类或
阅读全文
posted @
2021-06-15 08:48 大魔王先生
阅读(738)
摘要:前言 Docker和Kubernetes是我最近在学习的内容,本来是去年的目标,由于工作比较忙,没有时间去学习,今年剩下的半年时间我会好好系统学习下相关的内容,最后在学习下Devops相关理念,希望最终能形成自己的一套思想; Docker系列文章: 为什么要学习Docker Docker基本组成 镜
阅读全文
posted @
2021-06-09 12:06 大魔王先生
阅读(567)
摘要:一、前言 5W1H法则是在一次面试中学习到的,后来在工作也开始使用这种东西,虽然最后没去那家公司,但是也是学习到了,关注开这些东西以后,也发现了一些简化版的3W法则,最近公司也要搞Docekr,所以写篇博客来说说为什么要学习Docker。 二、What Docker 什么是Docker?Docker
阅读全文
posted @
2019-06-21 08:42 大魔王先生
阅读(1317)