IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> K8s 学习笔记 -> 正文阅读

[系统运维]K8s 学习笔记

第一章 k8s 介绍

应用部署方式的演变

传统部署: app 直接在操作系统之上进行部署。

虚拟化部署: 一台物理机上虚拟化多个虚拟机。 每个虚拟机都是独立的环境。

容器化部署: 与虚拟化相似,但共享了操作系统。

在这里插入图片描述

虚拟化部署,与容器化部署程序直接相互隔离,但是虚拟化每个隔离之间都需要操作系统,比较消耗系统的资源。

容器化部署可以跨云服务商,跨linux 操作系统进行发布。且每个容器拥有自己的文件系统,cpu,内存,进程空间。app 所需要的资源由容器来提供。

容器存在的问题:

1 一个容器故障宕机了,如何让另外一个容器去替补停机的容器。

2 当并发量增大的时候,如何去横向扩展容器的数量。

容器管理的问题可以统称为容器的编排问题,k8s: google开源的容器编排工具。

SWarm : docker 自己的编排工具。

K8s 简介

k8s 的本质是一组服务器集群,在集群的每一个节点上运行特定的程序。对节点中的容器进行管理。目的是实现资源管理的自动化。

k8s 组件

一个k8s 集群是由控制节点(master)和 工作节点(node ),每个节点上都会安装不同的组件。

在这里插入图片描述
举例说明,向ApiServer 发送请求,请求运行一个nginx,则通过Scheduler 进行计算,Controller-manager进行调度,假设nginx 服务运行在pod 节点上了。Etecd 记录nginx 服务相关元数据。

一旦k8s环境启动之后,master 和node 都会将自身的信息存储到etcd 数据库中

Node 节点正真干活的(工作负载节点,node 节点上的docker 负责容器的运行), kubelet 接受控制节点发送过来的信息,将信息发送给相应的docker,来执行各种操作。

kube-proxy 客户端访问接口。一个nginx 服务运行了,如果要访问nginx ,就需要kube-proxy 来对pod 产生访问的代理。

在这里插入图片描述

k8s 中的一些概念

pod 是k8s 中的最小控制单元, 容器必须跑到pod 中。pod 中至少要有一个容器 k8s 是通过控制pod,然后再去控制容器的。

Controller: k8s 中有各种类型的 Controller。

Label 标签: 用于对pod 进行分类,同一类pod 会拥有相同的标签。

Service: pod 对外服务的统一入口

NameSpace: 命名空间,用来隔离pod 的运行环境。Docker 也使用namspce 来隔离环境

k8s 安装

如果无法启动多个集群,建议使用官网的交互式环境。

k8s 集群介绍

k8s 集群一般分为两类,一主多从,和多主多从。

一主多从: 一个Master 节点,多个Node 节点,但存在单点故障等问题。常用于测试环境。

多主多从: 多个Mater节点,多个Node节点。搭建麻烦,但是安全性高,常用于生产环境。

在这里插入图片描述

k8s 安装方式

k8s 有多种部署方式,目前比较主流的方式有: kubeadm ,Minkube 二进制包

官网Minikube 部署方式

在这里插入图片描述

Minbikube: 用于快速搭建单节点的k8s 集群工具。

kubeadm: 一个用于快速搭建k8s集群工具。

二进制包: 从官网下载每个组件的二进制包,依次去安装,此方式对理解k8的组件更为有效。

Minikube 进行部署集群:

这里使用Minikube 进行部署集群。

下载minikube之后,输入下面命令。

1 minikube version

2 minikube start 启动k8s 集群

3 kubectl version

4 kubectl cluster-info

5 kubectl get nodes

kubeadm 安装 k8s 集群:

1 查看操作系统的版本,使用kubeadm 安装k8s集群,要求centos 的版本要在7.5 及以上。

? cat /etc/redhat-release

2 主机名解析

? 编辑三套服务器的 /etc/hosts 文件,添加服务器对应的ip地址和 主机名

? [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2aFuXpwj-1636808215928)(D:\java workstation\笔记\浪潮\images\image-20211113194514224.png)]

3 时间同步

k8s 要求节点的时间要精确一致,这里使用chronyd 服务从网络中同步时间。

? 3.1 启动 chronyd 服务命令 : systemctl start chronyd

? 3.2 设置chronyd 服务开机自启动 : systemctl enable chronyd

4 禁用iptables 和firewalld 服务(生产环境才能做)(k8s 和docker 在运行中会产生大量iptables 规则,为了不跟系统的iptables 进行混淆,直接关闭系统的iptables)

? systemctl stop firewalld

? systemctl disable firewalld

? systemctl stop iptables

? systemctl disable iptables

?

k8s 部署应用

1 kubectl get nodes 获取节点信息(当前只有一个节点)
在这里插入图片描述

2 kubectl create deployment 命令部署k8s 应用

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

该命令部署的是 kubernetes-bootcamp应用。We need to provide the deployment name and app image location (include the full repository url for images hosted outside Docker hub).

3 kubectl get deployments 查看部署的应用

在这里插入图片描述

在单节点上的一个应用。

4 查看应用

Pods that are running inside Kubernetes are running on a private, isolated network.By default they are visible from other pods and services within the same kubernetes cluster, but not outside that network.

翻译: Kubernetes内部运行的pod运行在一个专用的隔离网络上。默认情况下,它们可以从同一Kubernetes集群内的其他pod和 service 中看到,但不能从该网络外部看到。

Thekubectlcommand can create a proxy that will forward communications into the cluster-wide, private network. The proxy can be terminated by pressing control-C and won't show any output while its running.

4.1 `“kubectl”命令可以创建一个代理,将通信转发到集群范围的专用网络。可以通过按control-C终止代理,并且在代理运行时不会显示任何输出。下面命令来生成一个代理。

echo -e “\n\n\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n”; kubectl proxy

4.2 通过代理我们的主机与k8s 集群产生了联系。代理的节点提供了一些api 可以通过下面命令看到。

curl http://localhost:8001/version
在这里插入图片描述

  1. 3暴露接口

默认情况下,所有 Pod 只能在集群内部访问。因此要想在外部访问的话,需要做一个映射。

把容器的8080端口映射到节点的端口

kubectl expose deployment/kubernetes-bootcamp \

–type=“NodePort” \

–port 8080

NodePort 的意思是可以集群外部的网络进行访问。

4.4 查看服务的状态 命令 :kubectl get pods service

k8s 资源管理

资源管理介绍

在k8s 中,所有内容都抽象为资源,用户需要通过操作资源来管理k8s。

k8s本质就是一个集群系统,用户可以在集群中部署各种服务,所谓部署服务就是在k8s 集群中运行一个个容器,并将指定的程序跑到容器中。

k8s 中最小的管理单位是pod 而不是容器,所以只能将容器放到pod 中,但是k8s一般不直接管理pod,而是通过pod 管理器 (Controller)来管理pod 的。

Pod 可以提供服务之后,就要考虑如何访问Pod 中的服务。K8s 提供了Service 资源实现了这个功能。

当然,pod中的程序的数据需要持久化,K8s 还提供了各种存储系统。

在这里插入图片描述

学习K8s的核心 就是学习如何对集群上的Pod,Pod控制器,Service,存储等各种资源进行操作。

资源管理方式

1 命令式对象管理: 直接使用命令去操作k8s 的各种资源

在这里插入图片描述

2 命令式对象配置:通过命令配置和配置文件去操作k8s 资源。

在这里插入图片描述

3 声明式对象配置: 通过apply 命令和配置文件去操作k8s 资源。
在这里插入图片描述
apply 命令有资源就更新,没有就创建。
比较:
在这里插入图片描述

命令式对象管理

kubectl 命令

? kubectl 命令是 k8s 集群的命令行工具,可以通过它对集群本身进行管理。并且能在集群上进行容器化应用的安装部署。kubectll 命令语法如下:

在这里插入图片描述

command 指对资源执行的操作 如 create get delet

type 指资源的类型,比如 deployment,pod,service

name 指资源的名称,注意名称大小写敏感。

flags 指定额外的可选参数。

常见命令

kubectl get pod # 查看所有的pod

kubectl get pod pod_name 查看某个pod

kubectl get pod pod_name -o yaml 查看某个pod,以yaml的格式进行展示

kubectl --help 查看kubectl 的所有命令

在这里插入图片描述

在这里插入图片描述

k8s 中的资源类型

k8s 中所有的内容都抽象为资源,可以通过下面命令查看k8s 中的各种资源类型。

kubetcl api-resources

在这里插入图片描述

常用的资源有一下内容:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZRbgv3jD-1636892471039)(D:\java workstation\笔记\浪潮\images\image-20211113213547905.png)]
在这里插入图片描述

kubetcl describe pods 命令运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsn5ABkX-1636892471054)(D:\java workstation\笔记\浪潮\images\image-20211113215426816.png)]

命令式对象配置

命令式对象配置就是使用命令配合配置文件一起来操作k8s 资源。

ymal 文件声明要操作资源的具体信息。 比如说创建pod 的时候,要声明创建pod 容器镜像版本,所要预留的一些端口。

1 创建一个nginxpod.xml ,内容如下:

在这里插入图片描述

解释: 上面的是namespace 声明,kind 对应资源类型。metadata 元数据,只给了name 为dev, 创建一个名为dev 的namespace。 下面Pod的创建使用了这个namespace。 spec 详情描述。 containers 对应相应的容器细节。name 为容器名设置的是nginx-container,image 为对应的镜像名使用的是nginx:1.17.1 版本。

2 执行create 命令 ,创建资源

kubetcl create -f nginxpod.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PvylhX9u-1636892471061)(D:\java workstation\笔记\浪潮\images\image-20211113214445809.png)]

此时创建了两个资源,分别是namespace 和pod。 显示格式为 资源类型/资源名称

删除 kubetcl delete -f nginxpod.xml

声明式对象配置

声明式对象配置和命令式对象配置很类似,但是它只需要一个apply 命令。

k8s 实战入门

Namespace

Namespace 是k8s 中非常重要的一种资源,它的主要作用是用来实现多套环境的资源隔离多租户的资源隔离

默认情况下,K8s 集群中所有的pod 都可以互相访问,但是在实际中,可能不想让两个pod 之间相互访问,这个时候就需要将这两个pod 划分到不同的namespace 之下,K8s 通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组”。 以方便不同组的资源进行隔离使用和管理。

可以根据K8s 授权机制,将不同的namespace 交给不同的租户进行管理。这样就实现了多租户的资源隔离。此时还可以结合K8s 的资源配额机制,限定不同的租户能占用的资源,如cpu 使用量, 内存使用量等等。 来实现租户可用资源的管理。

在这里插入图片描述

K8s 集群启动之后,会默认创建几个namespace 。

使用命令式对象管理 查看:

    kubectl get namespace

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oooHPdQh-1636892471069)(D:\java workstation\笔记\浪潮\images\image-20211114182734278.png)]

default 指的是未指定namespace 的对象都会被分配在default 命名空间

kube-node-lease 集群节点之间的心跳维护,v1.13 开始引入

kube-public 此命名空间下的资源可以被所有人访问(包括未认证用户)

kube-system 所有由k8s系统创建的资源都处于这个命名空间

获得指定名称空间下的所有pods

kubectl get pods -n kube-system

在这里插入图片描述

这些pods 都是集群组件。

**对Namespace资源的具体操作 **:

? 1 命令行操作

1.1 查询

kubectl get ns 

注意 :ns(namespace 的简写)

在这里插入图片描述

STATUS 为状态, Active 表示为此名称空间正在使用。 AGE 表示该名称空间已经工作的时间。

1.2 查看具体名称空间的描述

kubectl describe  ns default 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uMrQ3ml4-1636892471081)(D:\java workstation\笔记\浪潮\images\image-20211114184802788.png)]

Name : 名称空间的名字

Label 名称空间的标签,

Annotations 名称空间的注释

Status 名称空间的状态 Active 表示此名称空间正在使用, Terminating 表示正在删除名称空间 (删除名称空间的话,其下的pods 也会被删除,删除pods 需要时间。)

ResourceQuota 针对namespace 做的资源配额, No resource quota 没有限制

LimitRange 针对namespace 中的每个组件做的资源配额。 No LimitRange resource 表示没有限制。

1.3 名称空间的创建

kubectl create ns dev

在这里插入图片描述

1.4 名称空间的删除

删除dev 名称空间

kubectl delete ns dev 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-txj54I5W-1636892471091)(D:\java workstation\笔记\浪潮\images\image-20211114190127702.png)]

2 配置的形式创建与删除

准备一个ns-dev.yaml 文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sX3OQPKc-1636892471095)(D:\java workstation\笔记\浪潮\images\image-20211114190330751.png)]

apiVersion 对应版本,Kind 对应要操作资源的类型 metadata 相关元数据

执行对应的创建与删除命令即可

 创建  kubetcl create -f  ns-dev.yaml 

 删除  kubectl delete  -f ns-dev.yaml
Pod

Pod 是 Kubernetes 抽象出来的,表示一组一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源。这些资源包括:

  • 共享存储,当作卷
  • 网络,作为唯一的集群 IP 地址
  • 有关每个容器如何运行的信息,例如容器映像版本或要使用的特定端口。

Pod 可以认为是容器的封装,一个Pod 可以存在一个或多个容器。

?

1 查看集群组件pod

K8s 集群启动之后,集群中各个组件都是以Pod 的形式运行。可以通过下面命令查看

kubectl get pods -n kube-system

在这里插入图片描述

kube-apiserver-minikube : ApiServer 组件

还有一些组件, ControllerManager 组件, Scheduler 组件,etcd 组件,proxy 组件 这些在第一章中的k8s 组件中进行了介绍。

coredns 是用来做DNS 的。

2 命令行操作

? 2.1 创建并运行Pod

? k8s并没有提供单独运行pod 的命令,都是通过Pod 控制器来实现的。

? 命令格式: kubectl run (pod 控制器名称) [参数]

	> 参数介绍
	>
	> --image  指定pod 的镜像
	>
	> --port 指定端口
	>
	> --namespace 指定名称空间
kubectl run  kubernetes-bootcamp  --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=80 

2.2 查看pod 是否运行

kubectl get pod

在这里插入图片描述

NAME : pod 的名称

READY : 当前pod 有几个容器,容器里面有几个正在运行的。(计算不会将根容器计算在内)

RESTARTS: 重启次数, 在pod运行过程中如果出现问题会尝试重启。

查看更多详细信息可以加上 -o wide 参数

kubectl get pod  -o wide 

在这里插入图片描述

多出来的信息包括:

IP: 当前pod 的ip

Node: 当前pod 被调度到哪个结点上运行

查看描述信息

kubectl describe pod  kubernetes-bootcamp

运行结果

在这里插入图片描述
在这里插入图片描述

还有很多详细信息,这里不进行显示。

kubectl describe 命令十分重要, 当pod 出现错误的时候,可以使用该命令查看错误的具体细节

2.3 删除pod

Pod 是由pod 控制器来进行创建的,控制器会监控Pod 的状态,一旦发现Pod 死亡,会立即重启。所以想要删除Pod,必须要删除Pod 控制器

查询当前命名空间(当前为default)的Pod 控制器

kubectl get deploy 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QT5W10jS-1636892471117)(D:\java workstation\笔记\浪潮\images\image-20211114200300357.png)]

删除此Pod 控制器

kubectl  delete deploy kubernetes-bootcamp

只要删除Pod 控制器, 对应的Pod 也会被删除。

3 配置文件操作

注意使用命令行运行无法启动单独的Pod,但是使用 yaml 可以创建一个pod。 如下是使用yaml文件启动一个nginx pod

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sBTiiyoz-1636892471119)(D:\java workstation\笔记\浪潮\images\image-20211114201549799.png)]

注意这里的name 名 为pod 对应的name ,不是pod 控制器。

K8s 官网交互环境应用指南

交互式环境网址: https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/

K8 官网交互式应用可以学习到

  • 在集群上部署容器化应用程序
  • 弹性部署
  • 使用新的软件版本,更新容器化应用程序
  • 调试容器化应用程序

K8s 能做什么:

现代的Web 服务,用户希望应用程序能够 24/7 全天候使用,开发人员希望每天可以多次发布部署新版本的应用程序。 容器化可以帮助软件包达成这些目标,使应用程序能够以简单快速的方式发布和更新,而无需停机。Kubernetes 帮助您确保这些容器化的应用程序在您想要的时间和地点运行,并帮助应用程序找到它们需要的资源和工具。Kubernetes 是一个可用于生产的开源平台,根据 Google 容器集群方面积累的经验,以及来自社区的最佳实践而设计。

K8s 基础模块

在这里插入图片描述

处理生产级别流量的K8s 集群至少具备三个Node

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 22:09:38  更:2021-11-14 22:09:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:27:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码