kubernetes技术分享-可用于企业内部培训

前言

最近很多老铁找我,问有没有适合企业培训用的k8s课件,为了节省大家自己整理资料所花费的时间,我整理了一篇文档,可适用于企业内部培训使用,获取完整pdf可关注公众号领取。

培训内容包括如下

Kubernetes是什么?

kubernetes功能

Kubernetes优点

Kubernetes组件讲解

Kubernetes架构

关键词解释-pod,service,deploymentd等

简单使用

Kubernetes是什么?

Kubernetes是一个开源的容器管理平台,简称k8s,用于管理多个主机上的容器化应用程序 ,提供了应用程序的快速部署、扩缩容,升级和回滚的能力;利用service可以实现服务发现,负载均衡以及转发,通过ingress可以实现七层负载均衡等功能;Kubernetes这个名字源于希腊语,意思是舵手或飞行员,谷歌在2014年开放了Kubernetes项目,Kubernetes建立在谷歌十五年生产经验的基础上而对广大用户开放使用,目前社区活跃度也很高。对于初学者,上面概念比较难以理解,那么可以把他翻译成成如下几句话:

1.可以批量管理docker容器2.可以对应用升级和回滚3.可以实现七层和四层负载均衡4.可以实现服务的自动发现5.可以快速部署我们想要的应用6.能够自动对当前的架构进行扩容和缩容等操作

Kubernetes功能

应用健康检测应用实例复制水平自动扩展命名和发现负载均衡滚动更新资源监控日志访问自检和调试识别和认证

Kubernetes优点

1.灵活部署     kubernetes支持在多种平台部署,可在私有云,公有云,混合云下部署2.安全高效    基于rbac做认证授权,精确控制对k8s资源的操作权限3.负载均衡   支持四层和7层负载均衡4.多租户网络隔离   通过namespace可实现多个用户环境,网络,资源之间的隔离5.很好的自愈能力   自动布置,自动重启,自动复制,自动扩展

Kubernetes组件讲解

1.master节点组件

1)apiserver

提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制,负责接收、解析、处理请求。

2)scheduler

调度器,负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。

3)kube-controller-manager

控制器,负责维护集群的状态,检查pod的健康状态,比如故障检测、自动扩展、滚动更新等一些操作;

4)etcd

etcd是一个key/value形式的键值存储,保存了整个kubernetes集群的状态,在kubernetes中使用etcd时,需要对etcd做备份,保证高可用,整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是:

(1)网络插件calico,对于其它网络插件也需要用到etcd存储网络的配置信息

(2)kubernetes本身,包括各种对象的状态和元信息配置

注意:网络插件操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API,所以在下面我们执行etcdctl的时候需要设置ETCDCTL_API环境变量,该变量默认值为2,表示使用v2版本的api,v3表示使用v3版本的api

5)docker

是一个容器引擎,用于运行容器

2.node节点组件,工作节点组件

1)kubelet

负责与master节点的apiserver进行通信的,接收到客户的请求,进行创建Pod,管理Pod,启动pod等相关操作

2)kube-proxy

k8s代理,是在群集中的每个节点上运行的网络代理,kube-proxy负责请求转发,一旦发现了某一个Service关联的Pod信息发生了改变(如IP、Port等),由Kube-Proxy就会把变化后的service转换成IPVS或IPtables规则中,完成对后端pod的负载均衡

3)docker

是一个容器引擎,用于运行容器

3.附加组件

1)coredns

k8s1.11之前使用的是kubedns

1.11之后才有coredns

coredns是一个DNS服务器,能够为Kubernetesservices提供DNS记录

2)dashboard

k8s的web界面,通过这个界面可以对k8s资源进行操作

3)IngressController

七层负载均衡控制器,可以创建nginx或者traefik这种七层负载应用,实现域名和https访问

4)prometheus+alertmanager+Grafana监控k8s集群和物理节点

5)elk 

采集pod和容器日志

Kubernetes架构

k8s的物理结构是master/node模式,架构图如下所示:

图片


master一般是三个节点或者五个节点做高可用,根据集群规模来定,master高可用指的是对apiserver做高可用或者对master的物理节点做高可用,node可以有多个节点,专门用来部署应用的。

关键词解释


Pod    篮子 container    装在篮子里的蛋



label    标签label selector  标签选择器,通过标签选择关联的资源



Deployment  Deployment为Pod和ReplicaSet(下一代Replication Controller)提供声明式更新



Service  服务,提供代理和负载均衡namespace   资源隔离

图片

图片

简单使用

图片

#编写一个yaml文件

cat redis-master-deployment.yaml

apiVersion: apps/v1 kind: Deploymentmetadata:  name: redis-master  labels:    app: redisspec:  selector:    matchLabels:      app: redis      role: master      tier: backend  replicas: 1  template:    metadata:      labels:        app: redis        role: master        tier: backend    spec:      containers:      - name: master        image: kubeguide/redis-master        ports:        - containerPort: 6379

kubectl apply -f redis-master-deployment.yaml


cat redis-master-service.yaml

apiVersion: v1kind: Servicemetadata:  name: redis-master  labels:    app: redis    role: master    tier: backendspec:  ports:  - port: 6379    targetPort: 6379  selector:    app: redis    role: master    tier: backend

kubectl apply -f redis-master-service.yaml


cat  redis-slave-deployment.yaml

apiVersion: apps/v1 kind: Deploymentmetadata:  name: redis-slave  labels:    app: redisspec:  selector:    matchLabels:      app: redis      role: slave      tier: backend  replicas: 1  template:    metadata:      labels:        app: redis        role: slave        tier: backend    spec:      containers:      - name: slave        image: kubeguide/guestbook-redis-slave        env:        - name: GET_HOSTS_FROM          value: dns        ports:        - containerPort: 6379

kubectl apply redis-slave-deployment.yaml


cat  redis-slave-service.yaml

apiVersion: v1kind: Servicemetadata:  name: redis-slave  labels:    app: redis    role: slave    tier: backendspec:  ports:  - port: 6379  selector:    app: redis    role: slave    tier: backend

kubectl apply -f redis-slave-service.yaml


cat  frontend-deployment.yaml

apiVersion: apps/v1 kind: Deploymentmetadata:  name: frontend  labels:    app: guestbookspec:  selector:    matchLabels:      app: guestbook      tier: frontend  replicas: 1  template:    metadata:      labels:        app: guestbook        tier: frontend    spec:      containers:      - name: php-redis        image: kubeguide/guestbook-php-frontend        env:        - name: GET_HOSTS_FROM          value: dns        ports:        - containerPort: 80

kubectl apply -f frontend-deployment.yaml

cat  frontend-service.yaml

apiVersion: v1kind: Servicemetadata:  name: frontend  labels:    app: guestbook    tier: frontendspec:  type: NodePort  ports:  - port: 80    targetPort: 80    nodePort: 30001  selector:    app: guestbook    tier: frontend

kubectl apply -f frontend-service.yaml

#查看frontd的service

kubectl get svc

显示如下:

NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                     AGEfrontend                  NodePort    10.111.215.185   <none>        80:30001/TCP                                17s


在浏览器输入,master节点ip:30001,即可出现如下界面

结果演示

图片


猜你喜欢

转载自blog.51cto.com/15127502/2655048
今日推荐