k8s详解

简介: @[TOC](目录)Kubernetes(简称 k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。本篇详解将介绍 k8s 的核心概念、架构和使用方法,帮助读者深入理解 k8s 并掌握其基本操作。# 一、k8s 核心概念1.1 容器容器是一种轻量级、可移植的虚拟化技术,用于打包和运行应用程序。容器可以共享主机操作系统的内核,从而提高部署效率和资源利用率。常见的容器技术包括 Docker、Kubernetes Pod、LXC 等。1.2 NamespaceNamespace 是 k8s 中的资源隔离单元,用于对 k8s 对象进行命名空间隔离。通过创建 Name

Kubernetes(简称 k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。本篇详解将介绍 k8s 的核心概念、架构和使用方法,帮助读者深入理解 k8s 并掌握其基本操作。

一、k8s 核心概念

1.1 容器
容器是一种轻量级、可移植的虚拟化技术,用于打包和运行应用程序。容器可以共享主机操作系统的内核,从而提高部署效率和资源利用率。常见的容器技术包括 Docker、Kubernetes Pod、LXC 等。
1.2 Namespace
Namespace 是 k8s 中的资源隔离单元,用于对 k8s 对象进行命名空间隔离。通过创建 Namespace,可以对同一集群中的不同应用程序进行资源隔离、权限控制和配置管理。
1.3 rootfs
rootfs 是 k8s 中的容器根文件系统,用于存储容器的文件系统和应用程序。rootfs 是读写可变的,可以实现容器的持久化存储和数据共享。

二、k8s 架构及服务

2.1 k8s 架构
k8s 的架构包括控制平面和数据平面。控制平面负责管理集群的状态和配置信息,包括 API Server、Scheduler、Controller 等组件。数据平面负责容器的运行和通信,包括 kubelet、kube-proxy、容器网络等组件。
2.2 Service
Service 是 k8s 中的服务抽象,用于暴露和访问集群内部的容器服务。Service 是一个逻辑名称,可以对应一个或多个容器,并且可以在集群中自动发现和路由。
2.2.1 Service 简介
Service 是 k8s 中最基本的服务抽象,用于将容器服务暴露给其他容器或外部客户端。Service 可以自动发现容器,并提供负载均衡、故障转移和高可用等功能。
2.2.2 Service 的创建
可以通过 kubectl 命令创建 Service,例如:

kubectl create service <service-name> --type=<type> --port=<port> --target-port=<target-port>  

其中,是 Service 的名称,是 Service 的类型,是容器监听的端口,是 Service 暴露的端口。
2.2.3 检测服务
可以通过 kubectl 命令检测 Service 的状态,例如:

kubectl get service <service-name>  

2.2.4 在运行的容器中远程执行命令
可以通过 kubectl 命令在运行的容器中远程执行命令,例如:

kubectl exec <container-name> -- <command>  

2.3 连接集群外部的服务
可以通过 k8s 的 Service 暴露集群内部的容器服务到集群外部,从而实现外部客户端对容器服务的访问。
2.3.1 介绍服务 endpoint
Service endpoint 是 Service 在集群外部的访问地址,可以用于连接集群内部的容器服务。
2.3.2 手动配置服务的 endpoint
可以通过 kubectl 命令手动配置服务的 endpoint,例如:

kubectl expose service <service-name> --type=<type> --port=<port> --target-port=<target-port>  

2.3.3 为外部服务创建别名
可以通过 kubectl 命令为外部服务创建别名,例如:

kubectl create serviceaccount <serviceaccount-name> --from-literal=<secret-name>=<secret-value>  

2.4 将服务暴露给外部客户端
可以通过 k8s 的 Loadbalance 将服务暴露给外部客户端,从而实现外部客户端对容器服务的负载均衡访问。
2.5 通过 Ingress 暴露服务
可以通过 Ingress 将服务暴露给外部客户端,从而实现外部客户端对容器服务的访问。

三、k8s卷

3.1 卷的类型
卷是 k8s 中的数据持久化和共享机制,用于将数据持久化到容器外部的存储系统中。卷的类型包括:

  • EmptyDir 卷:用于存储临时数据。
  • HostPath 卷:用于将宿主机上的文件系统挂载到容器中。
  • Persistent 卷:用于将数据持久化到容器外部的存储系统中。

3.2 通过卷在容器间共享数据
可以通过卷在容器间共享数据,例如:

kubectl create persistentvolume <pv-name>  
kubectl create persistentvolumeclaim <pc-name> --request-storage=<size> --volume-name=<pv-name>  
kubectl apply -f <config-file>  

其中,是 PersistentVolume 的名称,是 PersistentVolumeClaim 的名称,是请求的存储空间大小,是容器的配置文件。
3.3 管理卷
可以通过 kubectl 命令管理卷,例如:

kubectl get pvc <pc-name>  
kubectl delete pvc <pc-name>  

其中,是 PersistentVolumeClaim 的名称。
3.4 使用卷的注意事项
在使用卷时,需要注意以下几点:

  • 卷应该挂在同一宿主机上的容器中,否则可能会导致数据访问不了。
  • 卷的容量应该大于或等于请求的存储空间大小,否则可能会导致容器无法启动。
  • 卷的访问模式应该设置为 ReadWriteOnce,以确保数据的安全性。
  • 卷的生命周期应该与容器的生命周期相同,以确保数据的持久化和共享。

四、k8s 存储类

4.1 存储类
存储类是 k8s 中的存储资源,用于为容器提供持久化存储空间。存储类包括:

  • PersistentVolume:用于将数据持久化到容器外部的存储系统中。
  • StorageClass:用于定义存储类的属性和特征。
  • PersistentVolumeClaim:用于请求和分配存储空间。

4.2 创建存储类
可以通过 kubectl 命令创建存储类,例如:

kubectl create storageclass <sc-name> --provisioner=<provisioner-name> --parameters=<parameters>  

其中,是 StorageClass 的名称,是 Provisioner 的名称,是存储类的参数。
4.3 管理存储类
可以通过 kubectl 命令管理存储类,例如:

kubectl get storageclass <sc-name>  
kubectl delete storageclass <sc-name>  

其中,是 StorageClass 的名称。
4.4 使用存储类的注意事项
在使用存储类时,需要注意以下几点:

  • 存储类应该与宿主机的存储系统兼容,否则可能会导致数据无法访问。
  • 存储类的参数应该根据实际需求进行配置,以确保数据的安全性和可靠性。
  • 存储类应该与 PersistentVolume 和 PersistentVolumeClaim 配合使用,以确保数据的持久化和共享。

五、k8s 网络

5.1 网络概述
k8s 中的网络是指容器之间的通信机制,用于实现容器间的数据传输和共享。k8s 支持多种网络模式,包括:

  • Host 网络:将容器直接映射到宿主机上,容器间的通信通过宿主机实现。
  • Container 网络:将容器映射到同一网络中,容器间的通信通过网络实现。
  • Service 网络:将容器映射到 Service 上,容器间的通信通过 Service 实现。

5.2 创建网络
可以通过 kubectl 命令创建网络,例如:

kubectl create network <net-name>      

其中,是 Network 的名称。
5.3 管理网络
可以通过 kubectl 命令管理网络,例如:

kubectl get network <net-name>      
kubectl delete network <net-name>      

其中,是 Network 的名称。
5.4 使用网络的注意事项
在使用网络时,需要注意以下几点:

  • 网络应该与容器的通信需求相匹配,例如,Host 网络适用于容器与宿主机之间的通信,Container 网络适用于容器间的通信。
  • 网络的配置应该正确设置,例如,子网、路由、IP 等,以确保容器间的通信正常。
  • 网络的安全性应该得到保障,例如,通过防火墙、入侵检测等措施,防止容器间的恶意攻击和数据泄露。
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
数据安全/隐私保护 Docker 容器
分分钟搞定阿里云私有Docke镜像仓库的搭建
分分钟搞定阿里云私有Docke镜像仓库的搭建
3410 0
|
Kubernetes 负载均衡 应用服务中间件
【K8S系列】第十三讲:Ingress详解
【K8S系列】第十三讲:Ingress详解
3336 0
|
JSON Java API
玩转Spring Boot之RestTemplate的使用
在java代码里想要进行restful web client服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。Spring Boot提供了一种简单便捷的内置模板类来进行操作,这就是RestTemplate。
5188 0
|
消息中间件 Java 关系型数据库
10道不得不会的Docker面试题
10道不得不会的Docker面试题,10道不得不会的Docker面试题
8480 1
10道不得不会的Docker面试题
|
6月前
|
Ubuntu 持续交付 Docker
如何在 Ubuntu 20.04 上安装 Docker和DockerCompose
如何在 Ubuntu 20.04 上安装 Docker和DockerCompose
1659 1
|
Kubernetes 调度 数据格式
5分钟搞懂K8S的污点和容忍度(理论+实战)
本文主要快速讲解Kubernetes的污点和容忍度,一句话总结:如果Pod能容忍某个节点上的污点,那么Pod就可以调度到该节点。
5分钟搞懂K8S的污点和容忍度(理论+实战)
|
8月前
|
Kubernetes Linux 应用服务中间件
k8s快速搭建
k8s快速搭建
178 0
|
安全 Java Nacos
『MSE』阿里云中“间”力量MSE-Nacos
注册配置中心 MSE-Nacos (以下简称 MSE-Nacos),即 Nacos 的企业版,开箱即用的 Nacos 云服务,对 Nacos 内核进行企业级稳定性加固,故障自动检测及恢复、多可用区容灾、推空保护等特性,具有风险管理能力,全局持续分析并管理集群风险;企业级安全基于 RAM 鉴权体系,可构建细粒度的安全控制能力,集成阿里云 KMS 提供配置加密能力,帮企业更安全地使用 Nacos 服务
64171 10
『MSE』阿里云中“间”力量MSE-Nacos
|
8月前
|
网络协议 Linux API
c++网络库Libevent万字详解
libevent和libev都是c语言实现的异步事件库;通过注册异步事件,库检测事件触发,从而库根据发生事件的先后顺序,调用相应回调函数进行处理;事件包括:网络io事件,定时事件,信号事件;事件循环:等待并分发事件;用于管理事件;libevent 和 libev 主要封装了异步事件库与操作系统的交互;让用户不用关注平台的差异,只需着手事件的具体处理;创建事件处理框架event_base event_base_new()创建新事件event event_new()
272 0
|
JavaScript 前端开发 程序员
vue的 DatePicker 日期选择器,把选择的日期转化成需要格式传值
vue的 DatePicker 日期选择器,把选择的日期转化成需要格式传值
386 1