Gitee-k8s学习
云原生实战-kubernetes核心实战
namespace
Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离
Pod
Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。
Deployment
kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。
deployment:pod控制器,控制一组标签相同的pod,使Pod拥有多副本,自愈,扩缩容,滚动更新,版本回退等能力
service
Service可以看作是一组同类Pod对外的访问接口。同类pod指的是标签相同的pod
即可以通过pod的ip访问pod,一组同类的pod统一对外提供一个ip地址叫service ip,访问service ip,然后请求轮询给到service下的各个pod
svc两种模式,ClusterIP默认是集群内ip才能访问,
下面为例子,在master节点上可以通过pod ip访问pod,也可以通过访问service,让service将请求轮询打到同一label的pod上
NodePort-SVC
如果希望将Service暴露给集群外部使用,那么就要使用到另外一种类型的Service,称为NodePort类型。NodePort的工作原理其实就是将service的端口映射到Node的一个端口上,然后就可以通过NodeIp:NodePort来访问service了
如下图:和下下图,集群内任意一个Nodeip:NodePort,
外部访问通过NodePort,打到对应的Nodeport类型的service上(service port),然后service将请求分给service下统一label的pod,每个pod有自己的port,在配置文件中叫targetport
ingress
ingress:kubernetes中的一个对象,作用是定义请求如何转发到service的规则
ingress controller:具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发,实现方式有很多,比如Nginx, Contour, Haproxy等等
如下配置,hello.atguigu.com这个域名直接访问到hello-server这个service,然后根据service的配置文件轮询分配给同一个label的pod。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-host-bar
spec:
ingressClassName: nginx
rules:
- host: "hello.atguigu.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hello-server
port:
number: 8000
- host: "demo.atguigu.com"
http:
paths:
- pathType: Prefix
path: "/nginx" # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404
backend:
service:
name: nginx-demo ## java,比如使用路径重写,去掉前缀nginx
port:
number: 8000
如下图,ingress域名映射service ip,记得写到hosts文件里面
我们可以通过域名:port访问到,下图
path: "/nginx" # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404
path实际处理中就是这样
ingress的一些高级应用,比如路径重写,流量限制等在看文档理解https://kubernetes.github.io/ingress-nginx/