kubernetes介绍

一、kubernetes入门

Kubernetes是可移植、可扩展、开源的容器管理平台,是谷歌Borg的开源版本,简称k8s,可以创建应用、更新应用、回滚应用,也可以实现应用的扩容缩容,做到故障自恢复

  • 可移植:基于镜像可从一个环境迁移到另一个环境。
  • 可扩展:k8s集群可横向扩展,根据流量实现自动扩缩容。
  • 开源的:源代码已经公开,可以被用户免费使用,可以二次开发。

Borg是谷歌内部的容器编排工具,K8S是在Borg的基础上开发出来的轻量级容器编排工具。

1、k8s+DevOps+微服务架构师学习路径

1、掌握k8s全栈技术体系:安装(kubeadm和二进制)、架构、组件、资源对象、命令行管理工具kubectl、负载均衡service和Ingress、服务发现、数据包转发代理KubeProxy、自动扩缩容、网络、故障排查、k8s数据持久化、配置管理、健康检查、安全机制-认证、授权、准入控制、灰度发布、蓝绿部署、滚动更新、金丝雀发布、k8s可视化UI界面、k8s包管理工具Helm。
2、掌握微服务Istio:新一代微服务架构
3、掌握可视化监控系统 Prometheus+Grafana+AlertManager
4、掌握智能化日志采集平台EFK/ELK
5、掌握Jenkins+gitlab+harbor+k8s构建企业级DevOps平台
6、掌握适配边缘技术场景得轻量级得k8s-k3s入门与实战
7、掌握Rancher管理k8s集群-部署k8s应用

2、学习k8s优势

薪资高
发展前景好:BAT等大公司在使用,中小企业也开始把业务迁移到k8s上,作为运维、开发、测试或架构师,必须掌握。
业界认可度高:很多知名公司都在使用k8s,如阿里云、腾讯云、华为云、百度云、京东云、阿里云等。
功能强大:批处理、弹性伸缩、故障自我恢复、存储编排、机密和配置管理、自动部署和回滚、服务发现和负载均衡。
强大的生态体系:功能齐全的UI界面、全方位的立体监控系统、功能完备的日志收集平台。

3、公司都使用k8s的缘故

传统软件服务行业痛点:甲方需求变化频繁,交付时间短;行业竞争激烈,响应快、交付更高质量、成本更低是企业生存根本;技术迭代更新快,技术迭代带来的业务变革难定义,需应快速响应业务。

相关岗位:高级运维工程师、运维开发工程师、测试工程师、DevOps工程师、K8S容器工程师、IT技术架构师、产品经理等。

4、k8s应用领域

大数据领域应用:疾病疫情预测、交通行为预测等

HDFS在k8s中的应用:HDFS主要包括Dotanode、NameNode、Journalnode三个组件。

  • Dotanode:负责存储数据,负责数据块的分配,负责数据块的复制。
  • NameNode:负责元数据管理,负责元数据的分配,负责元数据的复制。
  • JournalNode:负责元数据日志的记录,负责元数据日志的复制。

人工智能平台应用:车辆信息自动化识别、违章车辆自动识别车辆信息等。

5G领域应用:诺基亚作为电信供应商,为多家电信运营商提供软件,并将软件整合到基础设施中,用容器化实现在不同的基础架构上运行相同的产品,无需更改产品本身。

5、K8S相关认证

CKA:全称Cloud Native Kubernetes Administrator,是CNCF(Cloud Native Computing Foundation)的认证,是Kubernetes官方的认证。通过则表示已经满足对K8S进行管理的能力,针对运维人员。

CKAD:全称Cloud Native Kubernetes Application Developer,是CNCF(Cloud Native Computing Foundation)的认证,是Kubernetes官方的认证。通过则表示已经满足对K8S设计、构建、配置和部署云原生应用,在k8s中能够定义应用程序资源,使用核心功能构建、监控、和诊断可伸缩的应用程序,针对开发人员。

6、Kubernetes发展历史

2014年6月,谷歌宣布开源kubernetes,华为、微软、radhat等公司加入。
2014年9月,kubernetes发布第一个测试版本0.2。
2015年7月,kubernetes发布第一个正式版本1.0,并进入到刚成立的CNCF基金会。
2018年3月,kubernetes从CNCF正式毕业,并发布1.10版本。
2020年12月,kubernetes发布1.20版本,宣布不再支持docker。

二、Kubernetes架构

1、Borg架构

Borg谷歌内部容器管理平台,谷歌90%以上的业务都在Borg上运行。在内部已经运行了十几年。
架构图:
图片 Borg架构图

2、kubernetes架构

k8s的物理架构是master/node模式:k8s集群至少需要一个主节点(master)和多个工作节点(node)。

Master节点:集群控制节点,负责整个集群的管理和控制,主要用于暴露API、调度部署和对节点进行管理。

工作节点:运行容器的应用节点,负责运行容器,接收来自master节点的调度指令。

单master节点架构图如下:
图片 单master节点架构图

多master节点架构图如下:
图片 多master节点架构图

多个master节点实现高可用,用keeplive和nginx实现负载均衡和反向代理。所有请求和操作都要调用apiserver。keeplive和nginx可以监测到apiserver是否存活,如果apiserver挂掉,nginx会自动切换到其他apiserver。

3、k8s组件

kubectl是k8s的命令行工具,通过kubectl可以和k8s集群进行交互。

master节点组件:apiserver、controller-manager、scheduler、etcd、calico、docker。

  • apiserver:k8s的对外api接口,负责接收客户端的请求,返回结果。资源操作的唯一入口。
  • controller-manager:k8s的控制器,负责集群资源的管理,比如pod、service、deployment等资源的创建、更新、删除等。
  • scheduler:k8s的调度组件,负责将pod调度到node节点上。
  • etcd:k8s的存储组件,负责存储集群状态,包括pod、service、node、namespace等资源信息。

node节点组件:kubelet、kube-proxy、Calico、CoreDNS、docker。

  • kubelet:k8s的agent,负责pod的创建、启动、停止、删除等。
  • kube-proxy:k8s的代理组件,负责将pod的请求转发到node节点上。实现service通信和负载均衡。
  • CoreDNS:k8s的dns组件,负责解析pod的域名。
  • Calico:k8s的网络组件,负责pod的网路通信。
  • docker/containerd:k8s的容器运行时组件,负责pod的容器化。

图片 k8s组件

三、kubernetes核心资源

1、Pod

Pod是kubernetes中的最小调度单元,k8s通过定义一个Pod的资源,然后在Pod中运行容器,容器需要指定镜像,用来运行具体的服务。

Pod代表集群上正在运行的一个进程,一个Pod封装一个容器(也可以封装多个容器)

Pod里的容器共享存储、网络等,也就是说,应该把整个Pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。

可以将Pod看作是豌豆荚,里面有很多豌豆,每个豌豆都是一个容器。豌豆荚里的豆子吸收共同的营养成分、肥料、水分等。Pod和容器的的关系类似,Pod里面的容器共享pod的网络、存储等资源。

在k8s中,所有的资源都可以使用一个yaml配置文件来创建,创建pod也可以使用yaml配置文件。

apiVersion: v1
kind: Pod
metadata:
  name: tomcat-pod
  namespace: default
  labels:
    tomcat: tomcat-pod
spec:
  containers:
  - name: tomcat-pod-java
    ports:
    - containerPort: 8080
    image: tomcat:8.5-jre8-alpine
    imagePullPolicy: IfNotPresent

创建pod:kubectl apply -f pod.yaml

查看pod:kubectl get pods -l tomcat=tomcat-pod

删除pod:kubectl delete pod tomcat-pod

2、lebel

label是标签的意思,k8s中的资源对象大都可以打上标签,如Node、Pod、Service等。

一个资源可以绑定任意多个label,k8s通过 label 可实现多维度的资源分组管理,后续可通过 Label Selector 查询和筛选用有某些Label的资源对象。

label的格式为:key=value,key和value都是字符串,key不能为空,value可以为空。

图片 label

3、Deployment

ReplicaSet是kubernetes中的副本控制器,管理pod,使pod副本的数量始终维持在预设的个数。

Deployment是管理Replicaset和pod的副本控制器,可以管理多个ReplicaSet,是比ReplicaSet更高级的控制器。

在创建Deployment的时候,会自动创建ReplicaSet,由Replicaset再创建pod。

Deployment能对Pod扩容、缩容、滚动更新和回滚、维持Pod数量。

在k8s中,创建Deployment需要使用yaml配置文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 3
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

创建Deployment:kubectl apply -f deployment.yaml

查看Deployment:kubectl get deploy | grep my-nginx

查看ReplicaSet:kubectl get replicaset

4、Service

在kubernetes中定义了service资源对象,Service定义了一个服务访问的入口,客户端通过这个入口即可访问服务背后的应用集群实例,service是一组Pod的逻辑集合,这一组Pod能够被Service访问到,通过是通过Label Selector实现的。

图片 service

在k8s中,创建Service需要使用yaml配置文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 3
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

创建service:kubectl apply -f service.yaml

查看service:kubectl get svc -l run=my-nginx

删除service:kubectl delete svc my-nginx

posted @ 2024-12-22 21:12  休耕  阅读(9)  评论(0编辑  收藏  举报