k8s技术总结(一)

news/2024/9/20 19:28:16/文章来源:https://www.cnblogs.com/xiaojp65536/p/18289139

在学习完docker之后,也很有必要再学习k8s的一些理论和技术。

一、基础概念

kubernetes(k8s)和docker在容器管理领域具有不同的侧重点和优势。当前docker主要关注单个容器的构建、运行和管理,而k8s则专注于大规模的容器编排和管理。k8s在以下几个特性中,更具有优势。

特性1:自动化部署和管理

特性2:服务发现和负载均衡

特性3:自动扩展、自愈能力

简单说,k8s属于master-worker架构,master节点负责核心调度,管理,worker节点用来执行用户程序。建议master节点单独部署(一台实体服务器),但可以有多个master node。master node所需的一些组件,kube-apiserver、scheduler、etcd。worker node所需的一些组件,kubelet、kube-proxy、container runtime。

                                                                            k8s服务参考图

二、k8s集群的操作和命令

1、我们使用kubectl,kubectl 是与 Kubernetes 集群交互的主要命令行工具。其基本语法结构为:

kubectl [command] [TYPE] [NAME] [flags]

2、常见操作命令

集群相关

# 查看所有节点
kubectl get nodes
# 查看集群信息
kubectl cluster-info

pod:Pod 是 Kubernetes 中的最小可部署单位,代表一组紧密耦合的容器。每个 Pod 包含一个或多个容器,这些容器共享网络和存储。通常,一个 Pod 运行一个主容器(例如,Web服务器),以及一些辅助容器(如日志收集、监控代理等)。

Pod 通常不直接创建,而是通过更高级别的控制器(如 Deployment)来管理。

相关操作:

# 查看Pod列表
kubectl get pods
# 查看指定命名空间下的Pod
kubectl get pods -n <namespace>
# 详细描述Pod:输出Pod的详细信息,包括事件、状态、配置信息等
kubectl describe pod <pod-name>
# 查看Pod的日志
kubectl logs <pod-name>
# 进入Pod的容器
kubectl exec -it <pod-name> -- /bin/bash
# 删除Pod
kubectl delete pod <pod-name> --force

service:是一种用于定义一组 Pod 的网络访问策略的资源对象。它为外部系统或内部组件提供了稳定的访问入口,即使这些 Pod 的 IP 地址会随着 Pod 的创建和销毁而变化。Service 通过将流量分发到符合选择条件的 Pod 来实现负载均衡。

Kubernetes 支持多种类型的 Service,不同类型的 Service 适用于不同的网络需求:

  1. ClusterIP(默认类型)

    • 仅在集群内部可访问。
    • 为 Service 创建一个虚拟 IP(Cluster IP),用于在集群内部的其他服务间进行通信。
    • 适用于服务之间的内部通信。
  2. NodePort

    • 将服务暴露在每个节点的某个端口上(范围是 30000-32767),通过 <NodeIP>:<NodePort> 访问。
    • 适用于需要从集群外部直接访问服务的情况。
  3. LoadBalancer

    • 在支持的云环境中(如 AWS、GCP),自动创建一个外部负载均衡器,并将其与 Service 关联。
    • 将流量转发到 Service 对应的 NodePort 或 ClusterIP。
    • 适用于需要自动创建云提供商的负载均衡器来暴露服务的情况。
  4. ExternalName

    • 将服务的 DNS 名称映射到外部的 DNS 名称。
    • 没有选择器,与其他服务类型不同,它不会选择集群中的 Pod,而是返回 CNAME 记录。
    • 适用于访问集群外部的资源,如数据库服务。

相关操作:

# 查看Service列表:列出所有Service及其对应的ClusterIP、外部IP等信息
kubectl get services
# 查看Service详细信息
kubectl describe service <service-name>
# 删除service
kubectl delete service <service-name>

deployment:Deployment 是一种用于管理应用程序的 Kubernetes 控制器。它提供声明式更新机制,使你能够管理应用的副本数量、更新策略等。Deployment 是管理 Pod 的常用方式,它确保指定数量的 Pod 始终运行,并且可以自动执行滚动更新和回滚操作。

相关操作:

# 创建Deployment:使用指定镜像创建一个新的Deployment
kubectl create deployment <deployment-name> --image=<image-name>
# 查看Deployment列表
kubectl get deployments
# 查看Deployment详细信息
kubectl describe deployment <deployment-name>
# 更新Deployment的镜像:更新Deployment中容器的镜像,会触发滚动更新
kubectl set image deployment/<deployment-name> <container-name>=<new-image>
# 扩展或缩减Deployment的Pod副本数
kubectl scale deployment <deployment-name> --replicas=<number>
# 编辑Deployment
kubectl edit deployment <deployment-name>
# 删除Deployment
kubectl delete deployment <deployment-name>

ConfigMap资源:是 Kubernetes 中用于存储非机密配置信息的对象。它将配置信息以键值对的形式存储,可以将这些配置注入到容器中作为环境变量、命令行参数,或挂载为文件。ConfigMap 允许配置与容器镜像分离,使得应用程序更易于配置和管理。

相关操作:

# 创建ConfigMap
kubectl create configmap <configmap-name> --from-literal=<key>=<value>
# 查看ConfigMap列表
kubectl get configmaps
# 查看ConfigMap详细信息
kubectl describe configmap <configmap-name>
# 编辑Configmap
kubectl edit configmap <configmap-name>

命名空间:是 Kubernetes 中用于资源隔离的逻辑分区。它允许你在同一个集群中隔离不同的项目或团队的资源。每个 Namespace 之间的资源是独立的,例如 Pod、Service 等,因此可以避免不同应用或团队之间的冲突。

相关操作:

# 查看命名空间列表
kubectl get namespaces
# 创建新的命名空间
kubectl create namespace <namespace-name>
# 删除命名空间
kubectl delete namespace <namespace-name>
# 在指定命名空间中操作:可以用 -n 标志指定操作的命名空间
kubectl get pods -n <namespace-name>

资源监控

# 持续监控pod
kubectl get pods -w
# 监控特定资源
kubectl top pod

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781722.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TIM-定时器

TIM简介定时器类型

C# 创建 Windows Service 项目

C# 创建 WindowsService 服务项目空白处,右键选择“添加安装程序”可以看到两个控件,点击右击第一个控件,打开属性设计器,将其中的Account设置为LocalSystem(本地服务),接下来,右击上面的第二个控件,打开属性界面,设置ServiceName,和将其中的StratType设置为Automatic…

【日记】我也想喝 AD 钙(978 字)

正文周五写了一整天学海计划,周六跟了一天的编曲教程,今天则是把第三章剩下的教程跟完。最后,回旋曲写是写出来了,就是把自己听笑了。写得实在太烂了。昨天晚上买了回来的机票。9 月 10 号一早。该说不说机票是真的贵啊……同时,我发现我过去的机票,执飞飞机是波音 737-8…

Kubernetes-二进制高可用部署v1.23.x

目录高可用架构k8s集群组件ectdkube-apiserverkube-schedulerkube-controller-managerkubeletkube-proxykubectl高可用分析负载均衡节点设计1.环境准备1.1 环境规划1.2 所有节点配置host解析1.3 安装必备工具1.4 所有节点关闭防火墙、selinux、dnsmasq、swap1.5 Master01节点免…

使用Pandas和NumPy实现数据获取

公众号本文地址:https://mp.weixin.qq.com/s/Uc4sUwhjLTpOo85ubj0-QA以某城市地铁数据为例,通过提取每个站三个月15分钟粒度的上下客量数据,展示Pandas和Numpy的案例应用。数据:http://u6v.cn/5W2i8H http://u6v.cn/6hUVjk初步发现数据有三个特点::1、地铁数据的前五行是…

Datawhale X 魔搭 AI夏令营(二)

一.AI生图的伦理与道德 1.虽然AI生图的能力强大,但是极易被使用在不正当的场景,未来的挑战不仅仅是技术的突破,更有攻防技术的跟进。 二.使用通义千问工具对内核代码进行解析,更快速的搭建代码 1.通义千问是具有信息查询、语言理解、文本创作等多能力的AI助手 2.使用方法三…

docker 详细教程(通俗易懂,带有应用示例)

1、Docker 基本概念 什么是 Docker? Docker 是一个开源的容器化平台,允许开发者封装他们的应用程序及其所有依赖项到一个标准化的单元中,这个单元被称为“容器”。容器可以在任何支持 Docker 的环境中运行,从而确保应用程序的可移植性和一致性。 Docker 的优势一致性和可移…

for循环练习

static void Main(string[] arg){int intSum = 0;for (int i = 0; i <= 100; i++){intSum += i;}Console.WriteLine(intSum);Console.ReadKey();}static void Main(string[] arg){for (int i = 0; i < 100; i++){Console.WriteLine("我下次一定小心!");//打印&…

Pandas从入门到放弃

公众号本文地址:https://mp.weixin.qq.com/s/mSkA5KvL1390Js8_1ZBiywPandas简介 Pandas是Panel data(面板数据)和Data analysis(数据分析)的缩写,是基于NumPy的一种工具,故性能更加强劲。Pandas在管理结构数据方面非常方便,其基本功能可以大致概括为一下5类:数据 / 文…

代码随想录day27 || 455 分饼干,376 摆动序列,53 最大子序列和

分饼干 func findContentChildren(g []int, s []int) int {// 第一思路,双指针暴力解法var count intvar used2 = make([]bool, len(s))g = quicksort(g)s = quicksort(s)for _, child := range g {for idx, cookie := range s {if !used2[idx] && cookie >= child…

如何创建良好的数据模型?

本文将带你深入了解如何创建一个高效的数据模型,并以 NocoBase 为例,展示如何快速建立适合业务需求的数据结构。数据模型是构建高效和稳定系统的基础。它不仅决定了如何存储和管理数据,还直接影响系统的性能和可扩展性。 本文将带你深入了解如何创建一个高效的数据模型,并以…