kubernetes 基础总结

本文介绍了Kubernetes的基础知识,包括容器、Node、Pod、Deployment等核心概念,以及集群的结构和组件。详细阐述了K8s的安装,提供了实验环境(Kind、Minikube)和生产环境的搭建方法。此外,还讲解了Service、Helm的使用,以及如何通过Helm部署应用。最后,提到了Dashboard等扩展功能,帮助读者深入理解Kubernetes的管理和应用。
摘要由CSDN通过智能技术生成

注: 文章中的部分图片及部分内容借鉴了《Kubernetes 从上手到实践》《云原生技术公开课》,若有侵权,请告知删除,谢谢!

简单介绍

kubernetes简称k8s(后续大多以k8s代替说明),是一个用于对容器化应用进行编排、管理的工具。由Google于2014年开源。经过几年沉淀,k8s已成为容器编排领域事实上的标准。
从定义看出k8s是对容器进行编排(编排在这里可理解为部署、扩容、监控、负载均衡、日志记录等)的。因其操作对象为容器,故这里对容器进行简要说明。

容器

在实际工作环境中,经常会由于在搭建服务应用时因为应用的依赖、部署的环境以及应用的迁移遇到各种各样的问题,可见对这些服务的环境进行隔离打包显得非常重要,故容器应运而生。因此我们可以将容器定义为 视图受限、资源隔离的一组进程集合 。而组成这些容器的文件集合则称为该容器的镜像。目前来看,在标准化、容器化做的最好的就是Docker。故接下来我们只说k8s对Docker下的容器编排管理。

初步了解

Node

我们知道k8s是对容器进行管理的,而许许多多不同的容器常常是在多个机器(或称为服务器)上运行的。若k8s只能在一台机器上进行管理,则它的效用显然违背它的目标。故k8s经常是在一个集群下工作的。即k8s是对多台机器进行管理。这里的每台机器我们称为每个Node(即节点),这些Node里面肯定有一个Node是作为主节点来对其他工作节点(work node)进行管理的。其管理结构类似于 master-slave 模式。

Pod

k8s规定其最小的调度单元是Pod,k8s并不是直接操纵容器的。容器都被放入到了Pod当中,而k8s通过管理Pod来管理容器,关于为什么要用Pod并作为原子调度单位可参考这里。故我们可以简单理解Pod是一个或一组容器的集合。

Deployment

k8s中并不是直接对Pod进行管理的,而是依靠Deployment来解决。这是为了保证集群内一组Pod能维持指定的数量,并使得该组Pod能一起更新镜像版本、快速回滚。故我们知道Deployment是用来对Pod进行管理的。Deployment虽然能创建Pod,但创建Pod的副本数是由Deployment下的ReplicaSet管理的。ReplicaSet用来使Pod的副本数达到用户期望的状态。创建Pod的语法(通常以yaml文件进行创建)基本信息如下:
deployment

整体结构

从更高层来看K8S整体上遵循C/S架构,结构如下图:
![cs架构]](https://img-blog.csdnimg.cn/20191230191401978.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9iYWlfb2w=,size_16,color_FFFFFF,t_70)
可以看到其很像master-slave结构

master

mater内部由以下几部分组成:
master
master是k8s集群的“大脑”(通常称为control plane),其负责对集群进行调度、管理与存储等。

API Server

接收外部的信号与请求,并将一些信息写入到etcd中。对外部的请求做一些权限管理与认证。其以REST方式实现。

Controller

是k8s集群中最繁忙的部分,在后台控制各种进程,对集群进行调节管理等。

Scheduler

是集群的调度器,持续关注集群中未被调度的Pod,并根据条件来将Pod调度到对应的Node上。

etcd

存储集群的状态日志等信息,供API Server调用。

Node

Node节点的内部组成如下:
node

Kubelet

Kubelet实现了集群中Node节点的Pod的控制功能。当一个未被创建的Pod被Scheduler调度到符合条件的工作节点上后,将由kubelet来决定该Pod是否能运行在该Node上。

Container runtime

Container runtime 主要用来下载镜像并创建对应的容器。它的实现最常见的就是Docker。

Kube Proxy

我们都知道,想要访问某个服务,要么通过域名,要么通过 IP。而每个 Pod 在创建后都会有一个虚拟 IP,K8S 中有一个抽象的概念,叫做 Service ,kube-proxy 便是提供一种代理的服务,让你可以通过 Service 访问到 Pod。

安装

因k8s是对Docker下的容器进行管理的,故需要机器先安装Docker环境,因Docker在这里不是讲解的重点,故Docker的安装步骤在这里省略(离线安装方法可参考这篇文章)。接下来就是安装k8s环境,若是只想对k8s做一个了解,可只搭建实验环境进行体验。

实验环境

目前有以下两种简单方式来搭建:
Kind
Minikube

Kind

kind内部集成了k8s,并将k8s的相关命令进行了封装。关于kind的安装与使用可直接参考该项目主页下的说明文档。

Minikube

minikube是k8s官方为开发者提供的一套k8s体验工具。该工具安装前一般需要安装虚拟化管理程序如VirtualBox(若是不安装则minikube运行时将–vm-driver参数设置为none)。为了在创建k8s集群后我们能观察集群节点、pod的状态以及对集群进行管理,这里还需要安装 kubectl 工具。前面已经了解到k8s是典型的C/S架构,而kubectl就是CLI工具,kubectl的安装参考 这里。minikube的安装与使用可直接参考项目文档。minikube的好处在于不用关注太多安装方面的过程,直接在终端下输入 minikube dashboard就能在浏览器中通过系统界面查看集群状态。如下图:
minikube

生产环境

通常情况下,我们不只是搭建一个测试环境,而是需要一个生产可用、功能完备的集群环境。k8s生产环境的搭建方案有多种,这里我们选择官方的一个推荐方案使用 kubeadm 进行搭建。

前期准备

安装之前需要做一些准备,如下:

  1. 禁用swap
    自k8s 1.8之后,启动kubelet时,需要禁用swap,禁用的方法如下:
使用 sudo cat /proc/swaps 验证 swap 配置的设备和文件。
通过 swapoff -a 关闭 swap 。
使用 sudo blkid 或者 sudo lsblk 可查看到我们的设备属性,请注意输出结果中带有 swap 字样的信息。
将 /etc/fstab 中和上一条命令中输出的,和 swap 相关的挂载点都删掉,以免在机器重启或重挂载时,再挂载 swap 分区。
  1. 解除端口占用
    k8s是C/S架构,在启动后会固定监听一些端口用于提供服务,可以通过 sudo netstat -ntlp |grep -E '6443|23[79,80]|1025[0,1,2]'命令来查看这些端口是否被占用,若占用,则手动释放。
  2. Docker安装
    前面说到,容器运行时,需要Docker,因此需要安装Docker。一般直接选择最新稳定版安装即可。
安装kubeadm和kubelet

安装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值