Kubernetes一文上手【手把手系列】

目录

  • Kubernetes
    • 前言
      • 部署方式的演变
    • K8S概述
    • K8S架构
      • Master节点
        • 1. API Server
        • 2. Etcd
        • 3. Controller Manager
        • 4. Scheduler
      • Node节点
        • 1. kubelet
        • 2. kube-proxy
        • 3. 容器运行时
      • 组件与插件
        • 1. Kubernetes DNS
        • 2. Dashboard
        • 3. Heapster
        • 4. Ingress Controller
    • K8S核心概念
      • Pod
      • Serivce
      • Namespace
      • Deployment
      • StatefulSet
      • DaemonSet
      • Job
      • CronJob
      • ConfigMap
      • Secret
    • K8S安装和部署(Linux)
      • 安装方式
      • minikube方式安装
        • 1. 查看Linux CPU架构
        • 2. 安装crictl
        • 3. 安装 cri-dockerd
        • 4. 为无驱动程序安装容器网络插件
        • 5.安装minikube
        • 6. 启动minkube
        • 7. 使用Dashboard
      • Kubeadm方式安装

Kubernetes

前言

部署方式的演变

  • 传统部署时代
    各个组织是在物理服务器上运行应用程序,会造成多个应用在同一台物理机上互相影响,或者一台物理机只运行一个应用造成资源浪费,并且维护物理机的成本很高
  • 虚拟化部署时代
    虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。
    每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。
  • 容器部署时代
    容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。

K8S概述

官网
K8S是一个用于管理容器的开源平台。它可以让用户更加方便地部署、扩展和管理容器化应用程序,并通过自动化的方式实现负载均衡、服务发现和自动弹性伸缩等功能。

K8S架构

Master节点

1. API Server

API Server 是 Kubernetes 最核心的组件之一,它提供了 Kubernetes 集群中各个组件之间的通信和管理接口,所有操作都需要通过 API Server 发起和处理。当用户使用 kubectl 命令或者其他 Kubernetes 客户端工具时,实际上是通过 API Server 和集群进行交互的。

2. Etcd

Etcd 是 Kubernetes 集群中的分布式键值存储系统,用于保存集群中的所有状态信息和元数据。所有与 Kubernetes 集群相关的信息,包括 Pod、Service、Deployment 等对象的创建、更新和删除等操作,都将被记录在 Etcd 中。这样可以使得 Kubernetes 系统具有高可用性和复原能力,并且允许多个 Master 节点之间进行数据同步和共享。

3. Controller Manager

Controller Manager 是 Kubernetes 集群中的另一个核心组件,它负责监控和维护集群中所有资源对象的状态,以及进行自动化控制和管理操作。Controller Manager 中包含多个控制器,每个控制器负责监控和维护一种资源对象的状态,如 Deployment、ReplicaSet、DaemonSet 等,同时根据用户的需求,自动进行相应的容器调度、扩容、缩容等操作。

4. Scheduler

Scheduler 是 Kubernetes 集群中的另一个重要组件,主要负责根据集群中各个节点的负载情况,以及用户的调度策略,将新创建的 Pod 分配到合适的节点上。Scheduler 会根据 Pod 的资源需求、节点的资源情况、节点之间的网络距离等因素进行智能调度,从而实现负载均衡和资源最大化利用的目标。

Node节点

节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。

1. kubelet

kubelet 是运行在每个 Node 节点上的代理程序,它负责与 Master 节点上的 API Server 进行通信,并根据 Master 节点下发的指令,调度和管理本地节点上的容器。kubelet 可以监控本地节点上的容器状态,如启动、停止、健康状况等,并定期向 Master 节点报告节点状态信息。

2. kube-proxy

kube-proxy 是 Kubernetes 集群中的网络代理组件,它主要负责实现集群内 Service 的负载均衡和访问控制等功能。每个 Node 节点上都会部署一个 kube-proxy 组件来负责处理该节点上所有 Service 的流量转发和路由等操作。

3. 容器运行时

容器运行时是 Kubernetes 中用于运行容器的底层组件,它负责将容器镜像转换为可以运行的进程,并提供容器的隔离、资源管理和网络管理等功能。Kubernetes 支持多种容器运行时,如 Docker、CRI-O、containerd 等,用户可以根据实际需求选择合适的容器运行时。容器运行时通常与 kubelet 紧密集成,在 Kubernetes 集群中发挥着至关重要的作用。

组件与插件

1. Kubernetes DNS

Kubernetes DNS 是 Kubernetes 集群中的域名解析系统,它为集群中所有容器提供了简单而可靠的 DNS 服务。通过 Kubernetes DNS,用户可以使用容器名称或 Service 名称等别名方式,轻松地访问到集群中运行的各种应用程序和服务。

2. Dashboard

Dashboard 是 Kubernetes 集群中的 Web 界面管理工具,它提供了一个易于使用和定制化的界面,让用户可以在不熟悉命令行操作的情况下,轻松地监控和管理集群中的资源对象和应用程序。Dashboard 支持多种自定义插件和主题,用户可以根据自己的需要进行定制和扩展。

3. Heapster

Heapster 是 Kubernetes 集群中的监控工具,它可以收集和分析各种容器和节点的性能指标,并将结果汇总和展示给用户。Heapster 支持多种存储后端,如 InfluxDB、ElasticSearch 等,用户可以选择适合自己的存储方式。

4. Ingress Controller

Ingress Controller 是 Kubernetes 集群中的负载均衡和流量路由组件,它可以将外部请求路由到集群内的不同 Service 或 Pod 上,并提供了多种负载均衡算法和路由规则。Ingress Controller 支持多种后端实现,如 Nginx、HAProxy 等,用户可以根据自己的需求进行选择和配置。 以上是 Kubernetes 中一些常用的组件和插件介绍,它们可以帮助用户更加高效地管理和操作 Kubernetes 集群中的容器应用程序。Kubernetes 的丰富生态系统和庞大社区,为用户提供了各种完善的支持和解决方案,让用户可以更加轻松地使用和掌握 Kubernetes。

K8S核心概念

Pod

Pod是Kubernetes的最小部署单元,通常包含一个或多个容器。Pod中的容器共享网络和存储,并在同一个主机上运行。

Serivce

Service 是 Kubernetes 中用于提供内部负载均衡和服务发现的组件,它可以将同一个应用程序的不同副本暴露在集群内部,并为这些副本提供唯一的虚拟 IP 地址和 DNS 域名。Service 可以通过控制器进行创建、更新和删除操作。
Service可以将多个Pod的IP地址和端口号作为一个服务提供给其他应用程序使用,这样即使Pod的IP地址和端口号发生变化,Service的IP地址和端口号也会保持不变,保证了服务的稳定性和可靠性。

在Kubernetes中,Service与Pods一起使用,可以通过标签来选择哪些Pods属于同一个Service。Service可以有不同的类型,包括ClusterIP、NodePort和LoadBalancer。其中,ClusterIP是默认类型,它将Service暴露在集群内部的虚拟IP地址上,只能从集群内部访问。NodePort类型将Service暴露在每个节点的IP地址和一个静态端口上,可以从集群外部访问。LoadBalancer类型使用云提供商的负载均衡器服务,将Service暴露在一个外部IP地址上,可以从公网访问。

Namespace

Namespace 是 Kubernetes 中用于隔离和管理资源对象的逻辑分区,它可以帮助用户将不同的资源对象归类、管理和隔离。Kubernetes 中默认存在一些 Namespace,如 default、kube-system 等,用户也可以根据需要创建自定义的 Namespace。

Deployment

Deployment 是 Kubernetes 中用于管理 Pod 副本集的控制器,它可以控制一组 Pod 的创建、扩缩容和更新等操作。Deployment 支持滚动更新和回滚等功能,可以实现无缝的应用程序版本升级。

StatefulSet

StatefulSet 是 Kubernetes 中用于管理有状态应用程序副本集的控制器,它可以为每个 Pod 分配唯一的标识符和稳定的网络名称,保证每个 Pod 的唯一性和可访问性。StatefulSet 还支持有序部署和扩缩容等功能,可以实现高可靠性的有状态应用程序部署和管理.

DaemonSet

DaemonSet 是 Kubernetes 中用于在每个节点上运行一组 Pod 的控制器,它通常用于运行系统级别的服务或代理程序等,在每个节点上保证资源对象的一致性和状态。

Job

Job 是 Kubernetes 中用于管理一次性任务的控制器,它会创建一个或多个 Pod 来执行某个任务,并在任务完成后自动删除这些 Pod。Job 还支持任务成功和失败的检测和处理等功能。

CronJob

CronJob 是 Kubernetes 中用于周期性执行任务的控制器,它可以根据用户定义的时间表,自动创建和删除相应的 Job 对象。CronJob 还支持任务成功和失败的检测和处理等功能。

ConfigMap

Kubernetes中的ConfigMap是一种用于存储应用程序配置数据的对象,它可以将配置数据与应用程序代码分离,从而提高了应用程序的可移植性和可维护性。ConfigMap可以存储任何形式的配置数据,例如环境变量、命令行参数、配置文件等等。

Secret

Kubernetes中的Secret是一种用于存储敏感信息的对象,例如密码、证书和密钥等

K8S安装和部署(Linux)

安装方式

  • minikube:是一种在本地环境中部署Kubernetes的工具,它可以在单个虚拟机中运行一个Kubernetes集群,一般用于开发、测试环境搭建。
  • kubeadm:是一种在物理机或虚拟机中快速部署Kubernetes集群的工具,已被证明可以应用于生成环境的集群搭建。
  • 二进制包:手工安装,流程复杂。二进制是 k8s 早期部署方式,相比 Kubeadm 更易维护,容易排查问题。

minikube方式安装

1. 查看Linux CPU架构
uname -m
该命令将显示机器硬件名称。如果值为"x86_64",表示系统是x64架构;如果值为"armv7l""aarch64"或类似的ARM架构标识,表示系统是ARM架构。
2. 安装crictl
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOFsetenforce 0# 安装crictl工具
yum install -y cri-tools
# 生成配置文件
crictl config runtime-endpoint
# 编辑配置文件
cat << EOF | tee /etc/crictl.yaml
runtime-endpoint: "unix:///run/containerd/containerd.sock"
image-endpoint: "unix:///run/containerd/containerd.sock"
timeout: 10
debug: false
pull-image-on-create: false
disable-pull-on-run: false
EOF# 查看是否安装成功,和docker命令差不多
crictl info
crictl images
3. 安装 cri-dockerd

cri-docked安装地址

  • 安装go环境
    使用 1.22的版本(尝试1.15报错)
# 下载Go语言二进制包
wget https://dl.google.com/go/go1.22.1.linux-amd64.tar.gz# 解压缩到/usr/local目录
sudo tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz 
# 设置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
source ~/.profile# 验证安装
go version
  • 安装cri-dockerd
下载cri-dockerd源码
git clone https://github.com/Mirantis/cri-dockerd.git进入cri-dockerd目录
cd cri-dockerd/make cri-dockerd  //编译接下来执行cri-dockerd命令的安装及环境配置命令
install -o root -g root -m 0755 cri-dockerd /usr/bin/cri-dockerd
cp -a packaging/systemd/* /etc/systemd/systemsystemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
4. 为无驱动程序安装容器网络插件
CNI_PLUGIN_VERSION="<1.4.1>"
CNI_PLUGIN_TAR="cni-plugins-linux-amd64-$CNI_PLUGIN_VERSION.tgz" # change arch if not on amd64
CNI_PLUGIN_INSTALL_DIR="/opt/cni/bin"curl -LO "https://github.com/containernetworking/plugins/releases/download/$CNI_PLUGIN_VERSION/$CNI_PLUGIN_TAR"
sudo mkdir -p "$CNI_PLUGIN_INSTALL_DIR"
sudo tar -xf "$CNI_PLUGIN_TAR" -C "$CNI_PLUGIN_INSTALL_DIR"
rm "$CNI_PLUGIN_TAR"
5.安装minikube

minikube安装地址

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

在这里插入图片描述

minikube version

在这里插入图片描述

6. 启动minkube

(默认使用docker驱动)
minikube可以支持多种不同类型的驱动,这里我们使用docker。在命令行中输入以下命令启动minikube,其中–driver=docker指定了使用docker驱动,如果希望默认使用docker驱动,也可以执行命令minikube config set driver docker,–image-mirror-country和–image-repository是非必须的。

minikube start --image-mirror-country=cn 
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers 
--driver=docker //在VM中执行需要把--drive=docker 换成--drive=none

Alt
根据报错提示需要安装conntrack:
这个错误信息表明你正在使用的Kubernetes版本1.28.3需要conntrack工具在root用户的PATH环境变量中才能运行。conntrack是一个用来跟踪网络连接的工具,它通常被用于管理iptables的NAT表,确保网络包的正确转发。
CentOS为例

sudo yum install conntrack-tools

如果你已经安装了conntrack但是Kubernetes仍然报错,可能是因为conntrack没有在root用户的PATH中。你可以尝试以root用户运行conntrack --version来确认。如果不在PATH中,你可以将其添加到root用户的.bashrc或.profile文件中
启动完成
Alt

7. 使用Dashboard

kubernetes为了方便集群的维护操作,提供了dashboard功能。dashboard包括了Cluster、Workloads、Service、Config and Storage、setting等多个模块功能,涵盖了kubernetes的方方面面,是个非常不错的管理GUI。

minikube dashboard

启动过程中如果提示添加metrics-server插件扩展,使用以下命令即可

minikube addons enable metrics-server

配置代理

kubectl proxy --port=8100 --address='192.168.2.107' --accept-hosts='^.*' &
Starting to serve on 192.168.2.107:8100

Kubeadm方式安装

敬请期待,还在抓紧创作中。

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

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

相关文章

CodeSys创建自定义的html5控件

文章目录 背景创建html5control.xml文件控件界面以及逻辑的实现使用的资源安装自定义的html5控件库 背景 查看官方的资料&#xff1a;https://content.helpme-codesys.com/en/CODESYS%20Visualization/_visu_html5_dev.html 官方的例子&#xff1a;https://forge.codesys.com/…

使用 PyOpenGL 进行 2D 图形渲染总结

一、说明 OpenGL是一个广泛使用的开放式跨平台实时 3D 图形库&#xff0c;开发于二十多年前。它提供了一个低级API&#xff0c;允许开发人员以统一的方式访问图形硬件。在开发需要硬件加速且需要在不同平台上运行的复杂 2D 或 3D 应用程序时&#xff0c;它是首选平台。它可以在…

liunx centos7 下通过yum删除安装已经安装的php

执行下面命令查看php相关的包 rpm -qa | grep php 只需要卸载几个名为common的包即可&#xff0c;其他同版本依赖会被全部删除&#xff0c;删除php71w-common&#xff0c;71w版本的依赖包全部会被删除。 查看php包的命令 rpm -qa | grep php 或 yum list installed | gre…

unity编辑器扩展高级用法

在PropertyDrawer中&#xff0c;您不能使用来自GUILayout或EditorGUILayout的自动布局API&#xff0c;而只能使用来自GUI和EditorGUI的绝对Rect API始终传递相应的起始位置和维度。 你需要 计算显示嵌套内容所需的总高度将此高度添加到public override float GetPropertyHeig…

实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库

随着互联网的迅猛发展&#xff0c;网络爬虫在信息收集、数据分析等领域扮演着重要角色。而在当前的技术环境下&#xff0c;使用TypeScript编写网络爬虫程序成为越来越流行的选择。TypeScript作为JavaScript的超集&#xff0c;通过类型检查和面向对象的特性&#xff0c;提高了代…

Linux :环境基础开发工具

目录: 1. Linux 软件包管理器 yum 1. 什么是软件包 2. 查看软件包 3. 如何安装软件 4. 如何卸载软件 2. Linux开发工具 1. Linux编辑器-vim的基本概念 2. vim使用 3. vim的基本操作 4. vim正常模式命令集 5. vim末行模式命令集 6. 简单vim配置 3. Linux编译器-gcc/…

常用相似度计算方法总总结

一、欧几里得相似度 1、欧几里得相似度 公式如下所示&#xff1a; 2、自定义代码实现 import numpy as np def EuclideanDistance(x, y):import numpy as npx np.array(x)y np.array(y)return np.sqrt(np.sum(np.square(x-y)))# 示例数据 # 用户1 的A B C D E商品数据 [3.3…

知识管理软件那么多,怎么挑选才适合初创企业?

对于初创企业来说&#xff0c;资源有限&#xff0c;效率显得尤其重要。此时&#xff0c;一个强大的知识管理软件就显得必不可少。它不仅利于信息的录入、查找和共享&#xff0c;还可以帮助团队更好的组织和协作&#xff0c;提高工作效率。那么&#xff0c;在众多的知识管理软件…

SQL-Labs靶场“34-35”关通关教程

君衍. 一、34关 POST单引号宽字节注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 二、35关 GET数字型报错注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 SQL-Labs靶场通关教程&#xff1a; SQL注入第一课 SQL注入思路基础 SQL无列…

第 6 章 ROS-xacro练习(自学二刷笔记)

重要参考&#xff1a; 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 6.4.3 Xacro_完整使用流程示例 需求描述: 使用 Xacro 优化 URDF 版的小车底盘模型实现 结果演示: 1.编写 X…

使用Dockerfile打包java项目生成镜像部署到Linux

1、Dockerfile 介绍 如果说容器就是“小板房”&#xff0c;镜像就是“样板间”。那么&#xff0c;要造出这个“样板间”&#xff0c;就必然要有一个“施工图纸”&#xff0c;由它来规定如何建造地基、铺设水电、开窗搭门等动作。这个“施工图纸”就是“Dockerfile”。 比起容…

VUE3.0(一):vue3.0简介

Vue 3 入门指南 什么是vue Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界…

0基础 三个月掌握C语言(13)-下

数据在内存中的存储 浮点数在内存中的存储 常见的浮点数&#xff1a;3.141592、1E10等 浮点数家族包括&#xff1a;float、double、long double类型 浮点数表示的范围&#xff1a;在float.h中定义 练习 关于&#xff08;float*)&n&#xff1a; &n&#xff1a;这是一…

53、Qt/信号与槽、QSS界面设计20240322

一、使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是…

yolov6实现遥感影像目标识别|以DIOR数据集为例

1 目标检测是计算机视觉领域中的一项重要任务&#xff0c;它的目标是在图像或视频中检测出物体的位置和类别。YOLO&#xff08;You Only Look Once&#xff09;是一系列经典的目标检测算法&#xff0c;最初由Joseph Redmon等人于2016年提出。YOLO算法具有快速、简单、端到端的特…

证书(公钥):网络安全的关键

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

YOLOv5全网首发改进: 注意力机制改进 | 上下文锚点注意力(CAA) | CVPR2024 PKINet 遥感图像目标检测

💡💡💡本文独家改进:引入了CAA模块来捕捉长距离的上下文信息,利用全局平均池化和1D条形卷积来增强中心区域的特征,从而提升检测精度,CAA和C3进行结合实现二次创新,改进思路来自CVPR2024 PKINet,2024年前沿最新改进,抢先使用 💡💡💡小目标数据集,涨点近两个…

【亚马逊云AI课程上新】「生成式 AI 精英速成计划」 即刻成为炙手可热 AI 人才

文章目录 1. 生成式 AI 精英速成计划介绍2. 重磅课程 增亮你的职业生涯3. 多种身份 全面赋能4. 关于「商业应用技能」课程5. 关于「技术开发技能」课程介绍6. 化身学霸得好礼 好礼双周送附&#xff1a;亚马逊云科技海外账号注册流程 1. 生成式 AI 精英速成计划介绍 &#x1f4…

公司调研 | Agility | 网红人形机器人Digit | 商业化情况

最近做的一些公司 / 产品调研没有从技术角度出发&#xff0c;而更关注宏观发展&#xff1a;主营方向、产品介绍、商业化落地情况、融资历程、公司愿景、创始人背景等。部分调研放在知乎上&#xff0c;大部分在飞书私人链接上 最近较关注人形Robot的发展情况&#xff0c;欢迎感兴…

在云上部署我的个人博客!!!

这和上一篇是连起来的&#xff0c;大家先整体看一遍&#xff0c;不要跟&#xff0c;前面有些弯路&#xff01;&#xff01;&#xff01; 【这是按时计费的&#xff0c;欠费不能用&#xff0c;交了好几次哈哈哈哈 】 【我买的域名是&#xff1a;128.1.61.228】 【把域名这个位置…