1.2 Kubernetes概述
什么是容器?
·容器为App提供独立的、受控的运行环境,是一种轻量级的操作系统虚拟化。
简单的容器:SandBox(沙盒、沙箱)
容器基本概念
·容器关键概念
―容器
一镜像
容器关键技术
Cgroup
NameSpace
容器时代的“双城记”
Docker Kubernetes(K8s)
Kubernetes -大海航行的舵手
K8s集群主要包括两个部分:Master节点(管理节点)和Node节点(计算节点)
Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。
Master节点
Master节点提供的集群控制,对集群做出全局性决策,例如调度等。通常在master节点上不运行用户容器。
Master节点包括API Server、Scheduler、Controller manager、etcd。
API Server :整个系统的对外接口
Scheduler:集群内部的资源进行调度
Controller Manager:负责管理控制器
etcd : Kubernetes的后端存储
Node节点
节点组件运行在每一个Node节点上,维护运行的pod并提供kubernetes运行时环境。
Node节点包括Pod、Docker、kubelet、kube-proxy、Fluentd、kube-dns (可选
Pod是K8s最小单位
Pod : Kubernetes最基本的操作单元
Docker :创建容器;
Kubelet:负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等;
Kube-proxy∶负责为Pod对象提供代理
Fluentd:主要负责日志收集、存储与查询。
Master节点和Node节点交互
2.%2 Kubernetes云上环境搭建
CCE-基于开源K8S、 Docker技术的企业级容器服务
云容器引擎(Cloud Container Engine,CCE)是基于业界主流的Docker和Kubernetes开源技术构建的容器服务,提供众多契合企业大规模容器集群场景的功能,在系统可靠性、高性能、开源社区兼容性等多个方面具有独特的优势,满足企业在构建容器云方面的各种需求。
CCE优势:高性能、简单易用、安全可靠、开放兼容
怎么管理K8s集群
图形化WEB-UI 华为云CCE控制台、官方Dashboard
命令行Kubectl i
WebTerminal 管理员并发用户少
Node+EIP 管理员并发用户多
华为云Kubernetes环境快速搭建架构
CE快该束物建Kubernetes
Kubernetes的访问
VPC:提供网络环境
EIP:访问公网
ECS:弹性云主机
CCE:创建K8s集群
Kubernetes环境管理
1. 进行Kubectl及配置文件下载
2. 下载kubectl和kubectl配置文件 kubeconfig.json和kubectl
3. Kubectl客户端服务器购买
4. 集群中管理节点安全组设置
5. 安装和使用kubectl
使用Kubernetes只需一个部署文件,使用一条命令就可以部署多层容器(前端,后台等)的完整集群:
$kubectl create -f single-config-file.yamlkubectl是和Kubernetes API交互的命令行程序。
1.3 Kubernetes核心概念
Kubernetes最小管理单元-POD
Pod是Kubernetes管理的最小基础单元。
一个Pod中封装了︰
一个或多个紧耦合的应用容器
存储资源
独立的IP
容器运行的选项
相同Pod中的任何容器都将共享相同的名称空间和本地网络。容器可以很容易地与其他容器在相同的容器中进行通信
实践1:POD的创建和管理
1.POD定义文件的上传
通过winscp将下载的附件中的yml文件上传至客户端服务器目录并查看;
2.创建POD
kubectl apply -f POD-1Containeryml
3.POD的管理
指定POD运行到指定的NODE上
kubectl apply -f POD-NodeSelector.yml
4.POD的删除
kubectl get pod
kubectl delete pod nginx
有状态应用和无状态应用
无有状态应用
无状态服务,易于部署且易于扩展。如果流量上升,则只需添加更多的负载平衡;上游容器镜像和基础架构中正在运行的容器其实几乎没有区别;
可以随时被替代,而且容器实例切换过程中几乎不需要耗费“切换成本”。
有状态应用
有状态的服务,从部署开始,这些容器就开始与上游镜像不同了,时间越长它们的差异越大;
每个运行的应用程序都至少有—个小状态(差异),但对于“无状态”应用程序来说,状态(差异)很小,而且可以进行快速替换。
无状态应用控制器– Deployment
ReplicationController 无状态应用的高可靠 ReplicaSets 无状态应用的高可靠应用的滚动发布 Deployment
实践2:Deployment的创建和管理
1.创建deployment
kubectl apply -f deployment.yml
2.查看POD
kubectl get pod
3.手动删除POD
kubbectl delete pod nginx-deployment-67d4b848b4-sghfq
4.扩展Deployment数量
kubectl scale deployment.v1.apps/nginx-deployment --replicas=4
kubectl get pod
5.查看deployment状态和数量
有状态应用控制器- StatefulSet
如果部署的应用满足右侧一个或多个部署需求则建议使用StatefulSet。
在具有以下特点时使用StatefulSets·稳定性,唯一的网络标识符
·稳定性,持久化存储
·有序的部署和扩展
·有序的删除和终止
·有序的自动滚动更新
实践3:StatefulSet的创建和管理
1.在Winscp将StatefulSet定义文件statefulset.yml上传至ecs-k8s。
2.通过以下命令创建StatefulSet。
kubetcl apply -f statefulset.yml
3.通过以下命令查看POD数量和名称
kubectl get pod
4.手动删除名称为web-0的POD。
kubectl delete pod web-0
5.再次查看POD。
kubectl get pod
系统应用控制器- DaemonSet
DaemonSet能够让所有或者特定的Node节点运行一个pod。当节点加入到kubernetes集群中,pod会被( DaemonSet ) 调度到该节点上运行。当节点从kubernetes集群中被移除,( DaemonSet )调度的pod会被移除。
运行日志采集器在每个Node上,例如fluentd ,logstash
运行监控的采集端在每个Node,例如prometheusnode exporter , collectd等
每个Node上运行一个分布式存储的守护进程,例如glusterd , ceph
适合场景:在一个区域的Node上都运行一个守护进程
实践4:DaemonSet的创建和管理
1. 在winscp中上传daemonset.yml文件至ecs-k8s
2. 查看kube-system命令空间中的DaemonSetkubectl get ds -n kube-system
3. 创建daemonset
kubectl apply -f daemonset.yml
4.再次查看kube-system中的DaemonSet
kubectl get ds -n kube-system
5.在CCE中购买节点
6.查看各个DaemonSet实例数
kubectl get ds -n kube-system
临时任务控制器–Job
我们经常需要进行批量数据处理和分析,以及按照时间进行调度执行。可以在Kubenrtes中
使用容器技术完成,使用Job和CronJob来执行。
Job负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。
CronJob是基于调度的Job执行将会自动产生多个job,调度格式参考Linux的cron系统。
实践5:Jobs创建和管理
1. winscp将Job.yml上传
2. 运行Job
kubectl apply -f Job. Yml
3.查看job运行状态
kubectl get job
4.查看此Job的输出
kubectl get pod
kubectl logs pi-c5pgr
应用访问- Service
Kubernetes应用间互访- Cluster IP
Kubernetes集群外互访–NodePort
公网访问- LoadBalancer
实践6 : Service的创建和管理
1.上传的deployment文件创建Deployment
kubectl apply -f deployment. Yml
2.创建NodePort类型的Service并查看
kubectl expose deployment nginx-deployment-type=NodePort
kubectl get service
3. 通过curl命令验证网站
kubectl get node
4.url 192.168.0.227:32465
5.华为云控制台查看其中一个kubernetes Node绑定的公网地址
6.在浏览器中,输入ECS绑定的公网地址+Service的Nodeport
命名空间- NameSpace
作用:Kubernetes可以使用Namespaces(命名空间)创建多个虚拟集群;Namespace为名称提供了一个范围。资源的Names在Namespace中具有唯一性
场景:当团队或项目中具有许多用户时,可以考虑使用Namespace来区分,a如果是少量用户集群,可以不需要考虑使用
Namespace,如果需要它们提供特殊性质时,可以开始使用Namespace。
大多数的Kubernetes中的集群默认会有一个叫default的namespace。实际上,应该是3个:default:你的service和app默认被创建于此。kube-system : kubernetes系统组件使用。kube-public :公共资源使用。
实践7∶命名空间的创建和管理
默认的Nama&pice实践
1. 手动的创建一个NameSpace命名空间并查看
kubectl create namespace test
kubectl get namespace
2.创建一个POD并指定此POD运行在test命名空间ll
kubectl apply-f POD-1Container.yml -namespace=test
3.查看指定命名空间里的POD
kubectl get pod -n test
.创建一个限制CPU和内存大小的NameSpace
kubectl create -f ns-cpu-men.yml -namespace=quota-mem-cpu-example
kubectl get resourcequota mem-cpu-demo -
namespace=quota-mem-cpu-example R--output=yaml
1. (判断题)若需要从客户端机器访问kubernetes集群,可以选择使用kubernetes命令行工具kubectl。
true
false
2. (单选题)Kubernetes管理的最小对象单元是?
Deployment
Pod
ReplicaSet
Container
3. (单选题)如果一组Pod对外提供服务(比如HTTP),它们的IP很有可能发生变化,那么客户端如何找到并访问这个服务?
DaemonSet
Jobs
Namespace
Service
4. (多选题)以下哪些是云容器引擎CCE的优势?
高性能
安全可靠
开放兼容
简单易用
5. (多选题)以下关于NameSpace的说法正确的是?
Kubernetes可以使用Namespaces创建多个虚拟集群
Namespace为名称提供了一个范围
资源的Names在Namespace中不具有唯一性
Kubernetes中的集群默认会有一个叫default的namespace