欢迎光临散文网 会员登陆 & 注册

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

2021-01-22 17:32 作者:动力节点小王本王  | 我要投稿


本篇文章主要核心内容:

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!



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

分享到微博请遵守国家法律