Kubernetes是用于自动部署、扩展和容器化应用程序的开源系统。
一个K8S系统,通常称为一个K8S集群(Cluster),包括两个部分:
- 一个Master节点(主节点)
- 一群Node节点(计算节点)
每个Node上面可用有多个Pod。
Pod是Kubernetes最基本的操作单元,一个Pod代表着集群中运行的一个进程,每个pod里可以有多个Docker。
# 进入指定 Pod 的第一个容器
kubectl exec -it <pod-name> -- /bin/bash
# 进入 Pod 中的特定容器(多容器 Pod)
kubectl exec -it <pod-name> -c <container-name> -- /bin/sh
- 副本控制器(Replication Controller,RC)
用于保证集群中有指定数目的 pod 运行。过多则杀死,过少则新建。 - 副本集(Replica Set,RS)
新一代 RC,能支持更多种类的匹配模式。一般不单独使用,而是作为Deploment参数使用。 - 部署(Deployment)
Deployment 提供了一种对 Pod 和 ReplicaSet 的管理方式,每一个 Deployment 都对应集群中的一次部署,是非常常见的 Kubernetes 对象。
kubectl scale deployments/nginx-deployment --replicas=0
kubectl scale deployments/nginx-deployment --replicas=1
kubectl scale deployments/sensingstore-deployment --replicas=0
Deployment自带滚动更新:
kubectl set image deployment/nginx nginx=nginx:1.21
新 ReplicaSet 从 0 开始逐步增加 Pod 数量,旧 ReplicaSet 同步减少 Pod 数量
- 服务(Service)
RC、RS 和 Deployment 只是保证了支撑服务的微服务 Pod 的数量,但是没有解决如何访问这些服务的问题,因Pod的停止、新建会导致不确定的IP和端口号。
Service 为 Pod 提供一个入口,主要通过 Labels 标签来选择后端Pod,这时候不论后端 Pod 的 IP 地址如何变更,只要 Pod 的 Labels 标签没变,那么 业务通过 service 调度就不会存在问题。
Service 对外暴露服务的方式
1、ClusterIP (默认) :在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问,一般这种类型的 Service 上层会挂一个 Ingress,通过 Ingress 暴露服务;
2、NodePort:在每个选定 Node 的相同端口上公开 Service,使用 <NodeIP>:<NodePort> 即可从集群外部访问 Service;
3、LoadBalancer:使用云厂商的 K8S 集群,即可使用这种方式的暴露 Service,自建的服务一般不支持。使用 LoadBalancer ,会生成一个 IP 地址,通过这个即可访问 Service, 通知这个 IP 也是高可用的;
4、ExternalName: 通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的externalName指定)公开 Service。不使用代理。这种类型需要kube-dns的v1.7或更高版本。
CNAME:这种记录允许您将多个名字映射到同一台计算机。
例如:当您拥有多个域名需要指向同一服务器IP,此时您就可以将一个域名做A记录指向服务器IP,然后将其他的域名做别名(即CNAME)到A记录的域名上;那么当您的服务器IP地址变更时,您就可以不必对一个一个域名做更改指向了,只需要更改A记录的那个域名到服务器新IP上,其他做别名(即CNAME)的那些域名的指向将自动更改到新的IP地址上(以上操作均需要在DNS处执行)。
- 命名空间(Namespace)
命名空间为 Kubernetes 集群提供虚拟的隔离作用,Kubernetes 集群初始有两个命名空间,分别是默认命名空间 default 和系统命名空间 kube-system,管理员可以可以创建新的命名空间满足需要。 - ingress
Ingress 是反向代理规则,用来规定 HTTP/S 请求应该被转发到哪个 Service 上,比如根据请求中不同的 Host 和 url 路径让请求落到不同的 Service 上。
Kubernetes 并没有自带 Ingress Controller,它只是一种标准,具体实现有多种,需要自己单独安装,常用的是 Nginx Ingress Controller 和 Traefik Ingress Controller。
一个集群中可以有多个 Ingress Controller, 在Ingress 中可以指定使用哪一个 Ingress Controller。
实际步骤
- 创建命名空间
- 使用 deployment 部署 pod
- 为服务创建 service
- 配置 ingress 的转发策略
kubectl get pod
kubectl get pod -o wide//查看所有
kubectl get deployment
kubectl get service
28服务器上需要加以下后缀
-n s-prod
查看log
journalctl -f
kubectl describe pod XXXXXXXXX
kubectl logs XXXXXX