首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >轻松玩转Kubernetes笔记分享

轻松玩转Kubernetes笔记分享

原创
作者头像
Jack20
修改2025-07-02 11:18:57
修改2025-07-02 11:18:57
1651
举报

1. 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.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中的任何容器都将共享相同的名称空间和本地网络。容器可以很容易地与其他容器在相同的容器中进行通信

3.实践1:POD的创建和管理

1.POD定义文件的上传

通过winscp将下载的附件中的yml文件上传至客户端服务器目录并查看;

2.创建POD

代码语言:txt
复制
kubectl apply -f POD-1Container.yml

3.POD的管理

指定POD运行到指定的NODE上

代码语言:txt
复制
kubectl apply -f POD-NodeSelector.yml

4.POD的删除

代码语言:txt
复制
kubectl get pod
kubectl delete pod nginx

有状态应用和无状态应用

无有状态应用

无状态服务,易于部署且易于扩展。如果流量上升,则只需添加更多的负载平衡;上游容器镜像和基础架构中正在运行的容器其实几乎没有区别;

可以随时被替代,而且容器实例切换过程中几乎不需要耗费“切换成本”。

有状态应用

有状态的服务,从部署开始,这些容器就开始与上游镜像不同了,时间越长它们的差异越大;

每个运行的应用程序都至少有—个小状态(差异),但对于“无状态”应用程序来说,状态(差异)很小,而且可以进行快速替换。

无状态应用控制器– Deployment

ReplicationController 无状态应用的高可靠 ReplicaSets 无状态应用的高可靠应用的滚动发布 Deployment

实践2:Deployment的创建和管理

1.创建deployment

代码语言:txt
复制
kubectl apply -f deployment.yml

2.查看POD

代码语言:txt
复制
kubectl get pod

3.手动删除POD

代码语言:txt
复制
kubbectl delete pod nginx-deployment-67d4b582434-sghfq

4.扩展Deployment数量

代码语言:txt
复制
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。

代码语言:txt
复制
kubetcl apply -f statefulset.yml

3.通过以下命令查看POD数量和名称

代码语言:txt
复制
kubectl get pod

4.手动删除名称为web-0的POD。

代码语言:txt
复制
kubectl delete pod web-0

5.再次查看POD。

代码语言:txt
复制
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

代码语言:txt
复制
get ds -n kube-system

3. 创建daemonset

代码语言:txt
复制
kubectl apply -f daemonset.yml

4.再次查看kube-system中的DaemonSet

代码语言:txt
复制
kubectl get ds -n kube-system

5.购买节点

6.查看各个DaemonSet实例数

代码语言:txt
复制
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

代码语言:txt
复制
kubectl apply -f Job.yml

3.查看job运行状态

代码语言:txt
复制
kubectl get job

4.查看此Job的输出

代码语言:txt
复制
kubectl get pod
kubectl logs pi-c5pgr

应用访问- Service

Kubernetes应用间互访- Cluster IP

Kubernetes集群外互访–NodePort

公网访问- LoadBalancer

实践6 : Service的创建和管理

1.上传的deployment文件创建Deployment

代码语言:txt
复制
kubectl apply -f deployment.yml

2.创建NodePort类型的Service并查看

代码语言:txt
复制
kubectl expose deployment nginx-deployment-type=NodePort
kubectl get service

3. 通过curl命令验证网站

代码语言:txt
复制
kubectl get node

4.url 192.168.0.229: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命名空间并查看

代码语言:txt
复制
kubectl create namespace test
kubectl get namespace

2.创建一个POD并指定此POD运行在test命名空间ll

代码语言:txt
复制
kubectl apply-f POD-1Container.yml -namespace=test

3.查看指定命名空间里的POD

代码语言:txt
复制
kubectl get pod -n test

.创建一个限制CPU和内存大小的NameSpace

代码语言:txt
复制
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. (多选题)以下关于NameSpace的说法正确的是?

Kubernetes可以使用Namespaces创建多个虚拟集群

Namespace为名称提供了一个范围

资源的Names在Namespace中不具有唯一性

Kubernetes中的集群默认会有一个叫default的namespace

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Kubernetes概述
  • 2.Kubernetes环境管理
  • 3.实践1:POD的创建和管理
  • 实践2:Deployment的创建和管理
  • 实践3:StatefulSet的创建和管理
  • 实践4:DaemonSet的创建和管理
  • 实践5:Jobs创建和管理
  • 实践6 : Service的创建和管理
  • 实践7∶命名空间的创建和管理
  • 回顾一下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档