轻松玩转Kubernetes笔记分享

举报
Jack20 发表于 2022/10/23 14:14:29 2022/10/23
【摘要】 1.2 Kubernetes概述什么是容器?·容器为App提供独立的、受控的运行环境,是一种轻量级的操作系统虚拟化。简单的容器:SandBox(沙盒、沙箱)容器基本概念·容器关键概念―容器一镜像容器关键技术CgroupNameSpace容器时代的“双城记”Docker Kubernetes(K8s)Kubernetes -大海航行的舵手K8s集群主要包括两个部分:Master节点(管理节点)...

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. 下载kubectlkubectl配置文件 kubeconfig.jsonkubectl

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. winscpJob.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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。