Kubernetes(k8s)集群管理实战|kubernetes部署微服务|k8s架构及和核心组件

本篇文章主要核心内容:
kubernetes部署Spring Cloud微服务
Kubernetes架构及和核心组件
kubernetes部署Spring Cloud微服务
1、项目本身打成jar包或者war包;
2、制作项目镜像(写Dockerfile文件);
3、用k8s部署镜像(命令方式、yaml方式);
4、对外暴露服务;
生成镜像:
docker build -t spring-cloud-alibaba-consumer -f Dockerfile-consumer .
docker build -t spring-cloud-alibaba-provider -f Dockerfile-provider .
docker build -t spring-cloud-alibaba-gateway -f Dockerfile-gateway .
部署提供者:
(1)kubectl create deployment spring-cloud-alibaba-provider --image=spring-cloud-alibaba-provider --dry-run -o yaml > provider.yaml
(2)kubectl apply -f provider.yaml
部署消费者:
(1)kubectl create deployment spring-cloud-alibaba-consumer --image=spring-cloud-alibaba-consumer --dry-run -o yaml > consumer.yaml
(2)kubectl apply -f consumer.yaml
(3)kubectl expose deployment spring-cloud-alibaba-consumer --port=9090 --target-port=9090 --type=NodePort
部署网关:
(1)kubectl create deployment spring-cloud-alibaba-gateway --image=spring-cloud-alibaba-gateway --dry-run -o yaml > gateway.yaml
(2)kubectl apply -f gateway.yaml
(3)kubectl expose deployment spring-cloud-alibaba-gateway --port=80 --target-port=80 --type=NodePort
在网关上面部署ingress,统一入口;
按照上面讲解ingress暴露nginx的步骤进行就可以;
kubectl get service -n ingress-nginx
kubectl get deploy -n ingress-nginx
kubectl get pods -n ingress-nginx
注意:deploy.yaml文件里面镜像从本地拉取;
containers:
- image: 38-springboot-k8s-1.0.0-jar
name: 38-springboot-k8s-1-0-0-jar-8ntrx
imagePullPolicy: Never
把镜像拉取策略改为Never;
看pod详情:
kubectl describe pods spring-cloud-alibaba-consumer-5d557f4765-d27d9
看pod运行日志:
kubectl logs -f spring-cloud-alibaba-consumer-8697896544-g6rsf
Kubernetes架构及和核心组件

API server是所有请求的唯一入口;
api server管理所有的事务,并把信息记录到etcd数据库中,etcd有一个自动服务发现的特性机制,etcd会搭建有三个节点的集群,实现三副本;
scheduler 调度器用来调度资源,查看业务节点的资源情况,确定在哪个node上创建pod,把指令告知给api server;
控制管理器controller-manager管理pod;
pod可以分为有状态和无状态的pod,一个pod里最好只放一个容器;
api server把任务下发给业务节点的kubelet去执行;
客户访问通过kube-proxy去访问pod;
pod下面的不一定是docker,还有别的容器;
一般pod中只包含一个容器,除了一种情况除外,那就是elk,elk会在pod内多放一个logstash去收集日志;
kubernetes各个组件及功能
1、master组件
kube-apiserver
kubernetes api,集群的统一入口,各组件之间的协调者,以restful api提供接口服务,所有对象资源的增删改查和监听操作都交给apiserver处理后在提交给etcd存储记录;
kube-controller-manager
处理集群中常规的后台任务,一种资源对应一个控制器,controller-manager就是负责管理这些控制器的;
kube-scheduler
根据调度算法为新创建的pod选择一个node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同节点上;
etcd
分布式键值存储系统,用户保存集群状态数据,比如pod、service等对象信息;
2、node组件
kubelet
kubelet时master在node节点上的代理agent,管理本node运行容器的生命周期,比如创建容器、pod挂载数据卷、下载sercet、获取容器和节点状态等工作,kubelet将每个pod转换成一组容器;
kube-proxy
在node节点上实现pod的网络代理,维护网络规则和四层的负载均衡工作;
docker
容器引擎,运行容器;
kubernetes核心概念
pod
最小部署单元;
一组容器的集合;
一个pod中的容器共享网络命名空间;
pod是短暂的;
controllers
replicaset:确保预期的pod副本数量;
deployment:无状态应用部署,比如nginx、apache,一定程度上的增减不会影响客户体验;
statefulset:有状态应用部署,是独一无二型的,会影响到客户的体验;
daemonset:确保所有node运行同一个pod,确保pod在统一命名空间;
job:一次性任务;
cronjob:定时任务;
service
防止pod失联;
定义一组pod的访问策略;
确保了每个pod的独立性和安全性;
storage
volumes
persistent volumes
pollcies策略
resource quotas
其他
label:标签,附加到某个资源上,用户关联对象、查询和筛选;
namespaces:命名空间,将对象从逻辑上隔离;
annotations:注释;
Kubectl:k8s提供的终端控制命令;
Kubeadm:可以用来初始化或加入一个k8s集群;
Kubernetes,点击以下实战教程,带你快速入门Kubernetes!
