k8s快速上手实操

news2024/11/30 5:01:43

前言

Kubernetes(简称K8s)是由Google开源的一个用于自动化部署、扩展和管理容器化应用程序的系统。自2014年发布以来,Kubernetes已经迅速成长为容器编排领域的标准,并在全球范围内得到了广泛的采用和认可。

Kubernetes作为现代容器编排的核心技术,其强大的功能和广泛的应用场景,使其在市场上占据了重要地位。对于希望在云计算和DevOps领域发展的专业人士来说,掌握Kubernetes无疑是提升职业竞争力的关键一步。特别是对于采用微服务架构的企业,如我们公司,Kubernetes的熟练使用更是至关重要。在未来,随着企业对云原生应用需求的不断增长,Kubernetes的应用前景将更加广阔。


一、K8S是什么?

Kubernetes,通常简称为K8s,是一个开源的平台,用于自动化部署、扩展和管理容器化应用程序。Kubernetes最初由Google开发,现在由云原生计算基金会(CNCF)维护。其主要目标是提供一个便捷、高效、可扩展的平台来管理容器化应用的生命周期。

二、k8s核心概念

  • 容器:
    容器是轻量级、独立的可执行包,包含运行应用所需的软件、库和配置文件。常用的容器引擎包括Docker和containerd。

  • Pod:
    Pod是Kubernetes中最小的可部署单元,通常包含一个或多个容器,这些容器共享存储、网络和命名空间。

  • 节点(Node):
    节点是Kubernetes集群中的工作机器,可以是虚拟机或物理机,每个节点运行着一个容器运行时(如Docker)和Kubelet(负责与Kubernetes主节点通信)。

  • 主节点(Master Node):
    主节点管理Kubernetes集群,负责调度、管理和监控所有节点。主节点运行的主要组件包括API Server、Controller Manager和Scheduler。

  • 部署(Deployment):
    Deployment是用于描述应用的声明式定义,包括应用的副本数量、更新策略等。Deployment可以自动处理应用的滚动更新和回滚。

  • 服务(Service):
    Service定义了一组Pod的逻辑集合,并提供一个稳定的接口来访问这些Pod。Service通过标签选择器将请求路由到相应的Pod。

  • ConfigMap 和 Secret:
    ConfigMap和Secret分别用于管理配置数据和敏感数据,如密码、密钥等。

三、Kubernetes的优势和劣势

Kubernetes (K8s) 虽然是一个流行的开源容器编排平台,我们也需要知道优劣方可进行技术的选型。

优势

  • 自动化容器编排

Kubernetes可以自动化容器的部署、调度和管理,确保应用程序以高效和可靠的方式运行。

  • 可扩展性

支持水平扩展和缩减,可以根据负载需求动态调整容器的数量,从而优化资源使用。
自我修复

Kubernetes可以自动检测和重启失败的容器,替换被杀死的容器,并仅在应用程序成功运行时才进行操作,从而提高应用的可靠性。

  • 滚动更新和回滚

支持滚动更新和回滚,可以在不中断服务的情况下更新应用程序,同时确保在更新失败时能够快速回滚到稳定版本。

  • 服务发现和负载均衡

内置服务发现和负载均衡,简化了服务间通信和负载分配。

  • 存储编排

支持挂载本地存储、云存储和网络存储,提供持久化存储解决方案。

  • 多租户隔离

通过命名空间和资源配额,可以在同一个集群中实现多租户隔离,确保资源使用的安全性和独立性。

  • 广泛的生态系统

Kubernetes有一个庞大且活跃的社区,拥有丰富的插件和扩展,可以与各种云提供商和工具集成。

劣势

  • 复杂性

Kubernetes的学习曲线较陡,配置和管理复杂,初学者需要投入大量时间来掌握其概念和操作。
资源消耗

运行Kubernetes本身需要消耗一定的资源,尤其是在小规模部署中,Kubernetes的开销可能显得较大。

  • 管理开销

尽管Kubernetes自动化了很多任务,但其管理和维护仍需要专门的知识和技能,可能需要专职人员来管理集群。

  • 调试困难

容器化应用程序的调试和监控比传统应用程序更具挑战性,尤其是在分布式系统中,故障排查可能变得更加复杂。

  • 安全性挑战

Kubernetes的安全配置需要仔细考虑和实施,不当的配置可能导致安全漏洞。多租户环境中的安全隔离和权限管理需要特别注意。
版本兼容性

不同版本的Kubernetes及其组件可能存在兼容性问题,升级和维护需要小心处理,以避免破坏现有工作负载。

四、本地部署实践

使用 Docker Desktop构建 K8s

下载部分省略,我们在这里只需要开启即可。
在这里插入图片描述

  1. 检验是否安装 ,输出如下信息则表示Kubernetes已经启用并运行
➜  ~ kubectl cluster-info

Kubernetes control plane is running at https://127.0.0.1:6443
CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
  1. 检查 docker 启动的容器
    在这里插入图片描述

也可以在命令行通过 docker ps 查看,目前来看一切正常。

验测k8s编排任务

目标:创建一个简单的Kubernetes部署和服务,用于运行一个Nginx容器

  1. 实操演示部署过程
# 创建测试目录
➜  k8s mkdir k8s-demo
cd k8s-demo
# 创建Nginx Deployment配置文件 nginx-deployment.yaml
➜  k8s-demo vim nginx-deployment.yaml
# 创建Nginx Service配置文件 nginx-service.yaml
➜  k8s-demo vim nginx-service.yaml
# 运行以下命令来创建部署和服务
➜  k8s-demo 
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml

deployment.apps/nginx-deployment created
service/nginx-service created

# 验证部署和服务
➜  k8s-demo kubectl get deployments

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           61s
# 查看服务状态
➜  k8s-demo kubectl get services
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP      10.96.0.1       <none>        443/TCP        13d
nginx-service   LoadBalancer   10.110.142.82   localhost     80:30452/TCP   5m2s

# 访问 nginx 服务,结果符合预期
➜  k8s-demo curl localhost

  1. 配置文件解读
  • 部署文件:nginx-deployment.yaml

目的

  1. 部署和管理Pod:定义Nginx应用的部署方式,包括Pod的数量、副本管理和滚动更新策略。
  2. 自我修复:确保在Pod故障时自动重新启动新的Pod。
  3. 一致性:保证在任何时候都运行指定数量的Pod副本。

主要功能

  1. 定义Pod模板:指定Pod的容器、镜像、端口等详细信息。
  2. 管理副本数:通过replicas字段定义所需的Pod副本数量。
  3. 滚动更新:支持无停机时间的滚动更新策略。
apiVersion: apps/v1 # API版本,apps/v1是当前Deployment的版本
kind: Deployment    # 资源类型是Deployment
metadata:
  name: nginx-deployment # Deployment的名称是nginx-deployment
  labels:
    app: nginx           # 定义了标签,用于标识资源
spec:
  replicas: 3            # 期望运行的Pod副本数量,这里是3个
  selector:
    matchLabels:
      app: nginx         # 标签选择器,选择带有app: nginx标签的Pod
  template:
    metadata:
      labels:
        app: nginx       # Pod的标签,这里是app: nginx
    spec:
      containers:        # 容器定义
      - name: nginx      # 容器名称是nginx
        image: nginx:1.17.1 # 使用的Docker镜像是nginx版本1.17.1
        ports:
        - containerPort: 80 # 容器暴露的端口是80

该文件对应的管理界面中是如下Deployments部分:
在这里插入图片描述

  • nginx-service.yaml 文件

    目的

    • 暴露服务:将Nginx应用暴露为一个网络服务,使得外部用户或其他服务可以访问。
    • 负载均衡:通过Service实现负载均衡,将请求分发到各个Pod实例。
    • 服务发现:提供集群内部的服务发现功能,使得其他Pod可以通过Service名称访问Nginx应用。

    主要功能

    • 选择器:匹配带有特定标签的Pod,通常是由Deployment创建的Pod。
    • 端口映射:定义外部访问端口和Pod内部端口之间的映射关系。
    • 服务类型:定义Service的类型,如ClusterIP、NodePort、LoadBalancer等,以决定如何暴露服务。
apiVersion: v1  # API版本,表示这个Service资源使用的是v1版本的API
kind: Service  # 资源类型,这里定义的是一个Service
metadata:
  name: nginx-service  # Service的名称,命名为nginx-service
spec:
  selector:
    app: nginx  # 选择器,匹配具有app=nginx标签的Pod
  ports:
  - protocol: TCP  # 使用的协议,这里是TCP
    port: 80  # Service暴露的端口,外部访问时使用的端口
    targetPort: 80  # 目标端口,容器内部应用监听的端口
  type: LoadBalancer  # Service的类型,这里使用的是LoadBalancer类型,用于负载均衡和外部访问

命名为nginx-service 对应的管理界面中是如下部分:
在这里插入图片描述

k8s管理页面使用

1、查看是否有无授权账户,如下表示还没有,需要创建一个新的服务账户并授予它足够的权限来访问Kubernetes Dashboard

➜ ~ kubectl -n kubernetes-dashboard get secret

NAME TYPE DATA AGE
kubernetes-dashboard-certs Opaque 0 13d
kubernetes-dashboard-csrf Opaque 1 13d
kubernetes-dashboard-key-holder Opaque 2 13d

2、手动创建账户

➜  k8s-demo kubectl -n kubernetes-dashboard get serviceaccount

NAME                   SECRETS   AGE
admin-user             0         106s
default                0         13d
kubernetes-dashboard   0         13d

➜  k8s-demo kubectl get clusterrolebinding admin-user
NAME         ROLE                        AGE
admin-user   ClusterRole/cluster-admin   116s

➜  k8s-demo kubectl -n kubernetes-dashboard get secrets
NAME                              TYPE     DATA   AGE
kubernetes-dashboard-certs        Opaque   0      13d
kubernetes-dashboard-csrf         Opaque   1      13d
kubernetes-dashboard-key-holder   Opaque   2      13d

服务账户在创建后没有关联到任何secrets,这可能是由于Kubernetes版本或配置的问题。在某些情况下,Kubernetes可能不会自动为服务账户创建token secret。在这种情况下,我们可以手动创建一个token secret并将其与服务账户关联。关键 2 步骤如下:

# 创建 创建一个Token Secret   文件名:admin-user-token-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: admin-user-token
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-token

# 应用配置
kubectl apply -f admin-user-token-secret.yaml

# 获取 token 
kubectl -n kubernetes-dashboard describe secret admin-user-token
如下所示:

在这里插入图片描述

最终我们查看 token :

➜  k8s-demo kubectl -n kubernetes-dashboard get secret
NAME                              TYPE                                  DATA   AGE
admin-user-token                  kubernetes.io/service-account-token   3      112s
kubernetes-dashboard-certs        Opaque                                0      13d
kubernetes-dashboard-csrf         Opaque                                1      13d
kubernetes-dashboard-key-holder   Opaque                                2      13d

➜  k8s-demo kubectl -n kubernetes-dashboard describe secret admin-user-token

Name:         admin-user-token
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: bc920e99-256e-47e7-a4c6-d42a7953199a

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1107 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6Iklqc1BVbXlsSUlBWDFVd1V4TEJTNkJvMXdXWmJ2N1hKa3RmMjMzNjRjakEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiYzkyMGU5OS0yNTZlLTQ3ZTctYTRjNi1kNDJhNzk1MzE5OWEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.YszFyi-lLQspy5lKpbcLs_GDdV9vlXrwf14ZIutFZIe3Qv3JYSgSxplTxYL6uVS8HNWEEUiS-U6IyKT5pLvYoOR3U-o5bwbqmv_Rp_iQId9NTZNWC7Zv3h6L_NOaftYwHtGXK-M7MZT-47NVZHMGQe9dMCzFujIBSkYeg5iCPCoCclE-ic2LfD2OsUhlzQ2Ut-_FINcONWb87RpjM-TBb86xJzrZ2DvSZgsWdMeee7MB1rn0iAzkLHq8BiDt_i_xiVenOkc7Yc30o1-5bEVaJ9TdybfuAnuON1iJaLrSpSyzgwfLrGYm-M2AO39HHQmYF9dvRilFvGGJDnaVLRblDA

3、启动 web 管理界面

  1. 启动代理
➜  k8s-demo kubectl proxy

Starting to serve on 127.0.0.1:8001
  1. 访问 Dashboad
    http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

  2. 输入如上 TOKEN
    在这里插入图片描述
    查看 service,其中就有我们测试的 Nginx, 可以直接访问 localhost:80 如下所示:

k8s管理界面
描述

参考

官网:https://kubernetes.io/docs/home/

总结

本文详细介绍了Kubernetes (k8s) 的基本概念、安装与部署流程,并通过一个实际示例演示了如何进行Kubernetes编排部署。文章深入讲解了配置文件的作用,并最终通过web管理界面与配置文件相结合,帮助读者更好地理解和应用Kubernetes。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新情侣飞行棋高阶羞羞版,解锁私密版情侣小游戏,文末有福利!

今天要跟大家聊聊一种特别有意思的游戏——情侣飞行棋羞羞版。别急着脸红&#xff0c;这可是专为情侣设计的游戏&#xff0c;让你们在轻松愉快的氛围中&#xff0c;增进了解&#xff0c;加深感情。 谈恋爱&#xff0c;不就是两个人在一起&#xff0c;做些有趣的事情吗&#xf…

分布式技术导论 — 探索分析从起源到现今的巅峰之旅(逻辑架构)

探索分析从起源到现今的巅峰之旅 背景介绍技术系列 逻辑架构连接处理层数据缓存层SQL处理层存储引擎逻辑层次的分工 模块执行连接处理层初始化模块核心API模块网络交互模块Client&Server 交互协议模块用户模块案例 访问控制模块案例 连接管理、连接线程和线程管理连接管理模…

数字政协:迈向智慧时代,开启政协工作新篇章

在信息化浪潮席卷全球的今天&#xff0c;数字技术不仅改变了我们的生活方式&#xff0c;也深刻影响着政治生态的变革。其中&#xff0c;“数字政协”的崛起&#xff0c;正是新时代政协工作创新发展的重要标志。那么&#xff0c;什么是数字政协&#xff1f;它又将如何助力政协工…

RAG工作流在高效信息检索中的应用

介绍 RAG&#xff08;Retrieval Augmented Generation&#xff09;是一种突破知识限制、整合外部数据并增强上下文理解的方法。 由于其高效地整合外部数据而无需持续微调&#xff0c;RAG的受欢迎程度正在飙升。 让我们来探索RAG如何克服LLM的挑战&#xff01; LLM知识限制大…

stable diffusion最全插件大全,新手必备指南

Stable diffusion30个必备插件推荐&#xff0c;给我点个赞吧&#xff0c;兄弟们 1&#xff0c;ComfyUI&#xff0c;SD扩展里面直接搜索就行&#xff0c; ComfyUI 是一个基于节点操作的UI界面&#xff0c;玩过建模的更容易学 安装后大概是这样的 评价&#xff1a;comfyui,更适…

LDR6023S:革新USB Type-C接口的完美伴侣

一、引言 随着科技的发展&#xff0c;USB Type-C接口以其高速传输、正反插等特性逐渐取代了传统的USB接口。而在这一背景下&#xff0c;LDR6023S作为一款USB Type-C转音频快充芯片&#xff0c;凭借其卓越的性能和广泛的应用场景&#xff0c;成为了市场上备受瞩目的产品。本文将…

判断两张图片是否相似

判断两张图片是否相似 要判断两张图片是否相似&#xff0c;你可以使用多种方法&#xff0c;其中包括结构相似性指数&#xff08;SSIM&#xff09;和 perception hash 等。以下是使用 SSIM 和 perception hash 进行判断的示例代码。 安装必要的包 确保你已经安装了 scikit-im…

远程医疗服务包含哪些服务内容?

在当今数字化时代&#xff0c;远程医疗服务正在迅速崛起&#xff0c;成为医疗保健领域的一项重要创新。通过远程医疗服务&#xff0c;患者可以足不出户就能获得医疗服务。那么远程医疗究竟能提供哪些服务呢?下面我们就来看看。 1. 远程咨询 远程咨询是远程医疗服务的基础&…

深入学习Java `synchronized` 关键字

深入学习Java synchronized 关键字 synchronized关键字通过确保在同一时间只有一个线程可以执行某个代码块&#xff0c;从而防止多个线程同时访问共享资源时发生数据不一致的问题。 修饰方法 当synchronized用于修饰实例方法时&#xff0c;表示当前实例对象是同步锁。这意味…

【C++ 11 新特性】lambda 表达式详解

文章目录 1. 常见 lambda 面试题&#x1f58a; 1. 常见 lambda 面试题&#x1f58a; &#x1f34e;① 如果⼀个 lambda 表达式作为参数传递给⼀个函数&#xff0c;那这个函数可以使⽤这个 lambda 表达式捕获的变量吗 ? &#x1f427; 函数本身无法直接访问到 lambda表达式捕获…

护眼台灯哪个品牌更好?五款市面主流的护眼台灯款式分享

近年来&#xff0c;护眼台灯的研发和创新不断推进&#xff0c;一些台灯配备了智能化功能&#xff0c;如定时开关机、自动调节光线等&#xff0c;使孩子们能够更好地控制用眼时间和光线环境。护眼台灯哪个品牌更好&#xff1f;一些高端的护眼台灯还采用了纳米光滤镜技术&#xf…

LeetCode | 35.搜索插入位置

这套题可以直接遍历&#xff0c;找到第一个大于target的数并返回其位置即可&#xff0c;但是时间复杂度为 O ( n 2 ) O(n^2) O(n2)&#xff0c;题目中明确要求时间复杂度为 O ( l o g n ) O(logn) O(logn)&#xff0c;考虑二分查找算法&#xff0c;这道题就是标准的二分查找的一…

Studio One软件最新版下载及详细安装教程

Studio One 6是一款功能丰富、专业级的音乐制作软件&#xff0c;它具备灵活的工作流程和高效的团队协作能力&#xff0c;能帮助用户实现高质量的音乐创作和制作。 智能模板更快的启动&#xff0c;全新的智能模板为你手头的任务提供了必要的工具集&#xff0c;包括基本录制、混音…

RFID技术助力资产信息数字化转型

在当前快速发展的信息化时代&#xff0c;资产信息的数字化转型对企业管理和运营具有重要意义。RFID技术作为一种先进的物联网技术&#xff0c;通过将资产信息全面数字化&#xff0c;实现高效、准确的管理和追踪&#xff0c;极大地提升了企业的运营效率和管理水平。 首先&#x…

Java版+ SaaS应用+接口技术RESTful API 技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开

Java版 SaaS应用接口技术RESTful API WebSocket WebService技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开 医院住院管理系统&#xff08;Hospital Information System简称HIS&#xff09;是一门医学、信息、管理、计算机等多种学科为一体的边缘科学&#xff…

进来学习Kubernetes知识点

Kubernetes集群部署 文章目录 Kubernetes集群部署一、Kubernetes概述1.1、什么是Kubernetes1.2、为什么要用Kubernetes 二、Kubernetes组件2.1、Master组件2.2、Node组件 三、Kubernetes资源对象3.1、Pod3.2、Label3.3、Replication Controller3.4、Deployment3.5、Service3.6、…

Mac M3 Pro 安装 Zookeeper-3.4.6

1、下载安装包 官方下载地址&#xff1a;https://archive.apache.org/dist/zookeeper/ 网盘下载地址&#xff1a;https://pan.baidu.com/s/1j6iy5bZkrY-GKGItenRB2w?pwdirrx 提取码: irrx 2、解压并添加环境变量 # 将安装包移动到目标目录 mv ~/Download/zookeeper-3.4.6.…

Django配置连接池:使用django-db-connection-pool配置连接池

一、该三方库文档使用 github地址&#xff1a; https://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.mdhttps://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.md1、选择指定版本&#xff0c;查看指定版本的文档和配置&am…

层出不穷的大模型产品:使用体验、倾向选择及未来展望

✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞、关注、收藏、评论&#xff0c;是对我最大…

Makefile-快速掌握

引用 本文完全参照大佬的文档写的&#xff0c;写这篇文章只是为了梳理一下知识 https://github.com/marmotedu/geekbang-go/blob/master/makefile/Makefile%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md 介绍 Makefile是一个工程文件的编译规则&#xff0c;描述了整个工程的编译…