K8S架构图
这张是缩略图,本人原创图要边听歌边看:
K8S集群架构图https://www.processon.com/view/61aeba7be0b34d02d8b908b1?fromnew=1#pc
K8S介绍
kubernetes简称k8s,是谷歌开源的容器集群管理系统,用于自动部署、扩展和管理容器化(containerized)应用程序。
K8S提供哪些功能
- 服务发现与调度
- 负载均衡
- 服务自愈
- 服务弹性扩容
K8S特点
- 可移植: 支持公有云,私有云,混合云
- 可扩展: 模块化, 插件化, 可挂载, 可组合
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
K8S几个重要概念
Namespaces:命名空间,Kubernetes使用Namespaces隔离多个虚拟环境,比如:生产环境、预发环境、开发环境,又或者项目一、项目二、项目三,根据使用方式来自定义不同的环境来做资源 隔离。
如何创建一个Namespaces呢?
第一种,使用命令创建:
kubectl create namespace new-ns
#或者使用简写:
kubectl create ns new-ns
第二种,通过文件方式创建
vim my-ns.yaml
输入以下
apiVersion: v1
kind: Namespace
metadata:
name: new-ns
运行命令
kubectl create -f ./my-ns.yaml
如何删除已经存在的Namespaces呢?
kubectl delete namespaces new-ns
#或者使用简写:
kubectl delete ns new-ns
Pod:是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod上可以跑一个或多个服务。
Deployment:控制器,为Replica Set(升级版的 Replication Controller)提供声明式更新。简单来说就是用它来控制Pod的创建、更新、删除。
编排文档参考:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: new-ns
spec:
serviceName: "nginx-service"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx:v1
ports:
- containerPort: 80
StatefulSet:也是控制器或有状态服务,不仅能管理Pod对象,还能确保这些Pod的顺序性和一致性。
编排文档参考:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx
namespace: new-ns
spec:
serviceName: "nginx-service"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx:v1
ports:
- containerPort: 80
Service:提供负载均衡的能力,有四种类型:ClusterIp,NodePort,LoadBalancer,ExternalName。
编排文档参考:
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
namespace: new-ns
labels:
app: nginx-svc
spec:
ports:
- port: 80
name: server
targetPort: 80
type: ClusterIP
clusterIP: None
selector:
app: nginx
Ingress:相当于一个7层的负载均衡器,是k8s对反向代理的一个抽象。工作原理类似Nginx的反向代理。
编排文档参考:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ing
namespace: new-ns
spec:
rules:
- host: xxx.xxx.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc
servicePort: server