k8s

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。

实际步骤

  1. 创建命名空间
  2. 使用 deployment 部署 pod
  3. 为服务创建 service
  4. 配置 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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容