回顾应用的部署,经历了以下几个阶段:
传统部署
:物理服务器上运行应用程序。虚拟机部署
:物理服务器上安装虚拟机,在虚拟机上运行应用程序。容器部署
:物理服务器上安装容器运行时(如docker),使用容器运行应用程序。这些不是单单靠一个容器能解决的,所以诞生了Kubernetes,它是一个容器集群管理系统,用于自动化部署、扩展和管理容器化应用程序。
K8s由主节点(Master)和工作节点(Node)组成,如下图所示。
主节点Master
负责管理集群的状态和配置,包含以下核心组件:
工作节点Node
是一个个独立的主机或虚拟机,用于运行容器化应用程序,每个工作节点上都运行着以下核心组件:
K8s在设计时做了高度的抽象,这让它并不依赖具体某一项技术,下面是它的几个核心组件的抽象:
除了核心组件,还有一些推荐的插件 :
详细组件参考另一篇文章:k8s资源组件介绍
K8s 的服务要想被其他服务或外部访问,通常有如下方式:
kube-dns 是 K8s 核心扩展组件,目前采用的实现是 CoreDNS。kube-dns 用来支撑集群内服务发现及灵活可配置的 DNS 代理。
kind: ConfigMap # 创建的资源类型为ConfigMap
apiVersion: v1
data:
Corefile: | # 定义了一个键值对,键为Corefile,值为多行文本。
.:53 { # 指定监听的端口为53,即DNS服务的默认端口,{}内为CoreDNS的配置项
errors # 启用错误日志记录
health # 启用健康检查
# CoreDNS使用配置的这些域名来处理对应的域名解析请求
# > kubernetes:这是一个域名,用来解析k8s中的服务和Pod的域名
# > cluster.local:这是k8s的默认域名后缀,用于解析集群内部域名
# > in-addr.arpa: 用于ipv4地址的反向解析,从IP地址到域名
# > ip6.arpa:用于ipv6地址的反向解析,从IP地址到域名
kubernetes cluster.local in-addr.arpa ip6.arpa
prometheus :9153 # 配置了与Prometheus监控系统的集成,监听端口为9153。
forward . 10.90.221.174 10.70.103.23 # 内置的上游DNS服务器,将所有未匹配的域名请求转发到10.90.221.174和10.70.103.23两个IP地址。
cache 30 # 启用缓存,并设置缓存的过期时间为30秒
}
K8s Service 类似于 微服务 概念,每个服务可以选择注册为集群内的一个服务,有灵活唯一的服务域名,格式:服务名.命名空间.集群域名
。举例如下:
集群内的其他服务只需访问其服务名即可找到对应的服务,而无需关注服务的部署情况。如同下面配置:
login_domain=http://loginserver:8061
访问路径为:从外部反向代理 → ingress 集群 → 服务 pod。如下图所求:
# 获取节点列表
kubectl get node
#查看所有命名空间
kubectl get ns
#获取指定命名空间meeting下的服务
kubectl get svc -n meeting
# 获取pod列表,-A 查看所有
kubectl get pod -A -o wide
# -n 指定命名空间
kubectl get pod -n meeting
# -o wide 显示成员状态,包括pod ip和node ip
kubectl get pod -o wide -n meeting
#查看命名空间下deployment状态
kubectl get deploy -n meeting
#查看指定容器的实时日志
kubectl logs -f pc3joinmeeting-c9cbcd4b6-9n98c -n meeting
#使用yaml文件创建pod
kubectl create -f YAML_FILE.yaml
#使用yaml文件删除pod
kubectl delete -f YAML_FILE.yaml
#即安装/更新 部署服务
kubectl apply -f service-deploy.yaml
#进入指定容器
kubectl exec -it -n default pre-live-web-5ddbbc68d-j25sv -- /bin/bash
#指定名称删除pod
kubectl delete pod pod-status-test -n meeting
#查看所有节点存在的标签
kubectl get nodes --show-labels
#查看命名空间test下的ingress规则
kubectl get ing -n test -o wide
#查看命名空间test下所有pod的资源使用情况
kubectl top pod -n test
#获取命名空间test下的HPA使用情况
kubectl get hpa -n test
#集群调度信息的事件, 例如扩縮容
kubectl get event -n test