关注 DevOps和k8s全栈技术 公众号,后台回复 k8s企业培训指南,获取最新kubernetes pdf学习指南,也可按、扫描文章最后的二维码关注公众号。

前言

最近很多老铁找我,问有没有适合企业培训用的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: Deployment
metadata:
  name: redis-master
  labels:
    app: redis
spec:
  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: v1
kind: Service
metadata:
  name: redis-master
  labels:
    app: redis
    role: master
    tier: backend
spec:
  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: Deployment
metadata:
  name: redis-slave
  labels:
    app: redis
spec:
  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: v1
kind: Service
metadata:
  name: redis-slave
  labels:
    app: redis
    role: slave
    tier: backend
spec:
  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: Deployment
metadata:
  name: frontend
  labels:
    app: guestbook
spec:
  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: v1
kind: Service
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  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)                                     AGE
frontend                  NodePort    10.111.215.185   <none>        80:30001/TCP                                17s

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

结果演示

微信公众号-------DevOps和k8s全栈技术

长按如下指纹可关注此公众号·

             

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐