k8s的出现解决了应用上云的一大难题,企业中越来越多的微服务要求上云
这里,通过一篇文章让大家能够透彻理解docker、k8s,并能够在需要的时候有的放矢

一、docker

Docker 是一个开源的应用容器引擎,主要包含几个概念:镜像(Image),容器(Container),仓库(Repository)。
三者的关系可以参考这张图。其中,docker是运行容器的载体(可以对容器进行操作);容器通过镜像创建;仓库用来管理镜像

docker build命令用来构建镜像,一般通过创建Dockerfile文件构建。可以参考
1、dockerfile多阶段编译
2、dockerfile指令


参考这里就可以掌握基本用法
1、docker概念理解
2、docker基本用法


二、k8s

k8s(Kubernetes) 是用于自动部署,扩展和管理容器化应用程序的开源系统

2.1 k8s架构:

 

 

 

这张系统架构图中,服务分为运行在工作节点上的服务组成集群级别控制板的服务

Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。

每次个节点上当然都要运行Docker。Docker来负责所有具体的映像下载和容器运行。

Kubernetes主要由以下几个核心组件组成:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

 

2.2 基本概念
主要包括pod,deployment,service
pod
pod
 
是 kubernetes 中最小的编排单位,通常由一个容器组成或者有多个容器组成
pod部署之后会生成一个IP地址,可以通过命令获取kubectl get pods nginx -o wide
pod IP分配基于flannel:https://www.hi-linux.com/posts/30481.html

 

deployment 

一个 pod 肯定不能均衡,自然要部署多个 Pod。deployment支持创建多个pod副本,支持可以滚动升级,回滚这些

service

会有一个ClusterIP,通过(spec.selector)指定Pod做负载均衡

pod,deployment,servic的部署都是都通编写yaml文件实现,kind字段对应部署的类型,eg:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  # 指定 label,便于检索
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    # 指定镜像
    image: nginx:alpine
    # 指定暴露端口
    ports:
    - containerPort: 80

 

此时,服务只能在集群中访问,如果需要把服务暴露给互联网,有三种方式:NodePort、LoadBalancer 和 Ingress
后端原理iptables和ipvs

可参考:http://dockone.io/article/4884 Kubernetes的

k8s涉及到的模块很多,比如负载均衡、弹性伸缩,滚动升级以及故障迁移等,可以在需要的时候针对性地进一步深入了解

k8s主要是对各种资源进行操作,kubectl是k8s的命令行工具(常用的一些命令):
https://kubernetes.io/zh/docs/reference/kubectl/cheatsheet/ kubectl命令行

kubectl create -f amp-pod.yaml
kubectl get pods
kubectl get pods -o wide 获取pod对应的ip地址
kubectl describe pod amp-dev-pod
kubectl delete pod amp-dev-pod
kubectl logs amp-dev-pod
kubectl describe pod nginx-pod:可以查看异常
kubectl get hpa
kubectl get replicaset
kubectl describe replicaset
kubectl delete replicaset
kubectl get deploy nginx-deployment
kubectl delete deploy nginx-deployment

 

学习k8s,首先得安装k8s的环境,个人开发环境,推荐minikube
安装文档:https://kubernetes.io/docs/tasks/tools/install-minikube/
在线工具:https://kubernetes.io/docs/tutorials/hello-minikube/

这里有一个k8s的系列教程:
https://cloud.tencent.com/developer/article/1515095



其它参考:
https://juejin.im/post/6844903983471935496 使用 k8s 部署你的第一个应用: Pod,Deployment 与 Service
https://blog.csdn.net/u011142688/article/details/80372552 Pod和Deployment
https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/ deployment 
https://blog.csdn.net/u011314442/article/details/88825166 虚悬镜像
https://www.runoob.com/w3cnote/yaml-intro.html yaml
http://docs.kubernetes.org.cn/230.html   k8s中文档

 

posted on 2020-08-20 10:57  妞溜溜  阅读(1253)  评论(0编辑  收藏  举报