kubernetes笔记

k8s笔记

一个k8s集群主要是由控制节点、工作节点构成,每个节点上都会安装不同的组件

master:集群的控制平面,负责集群的决策(管理)

ApiServer:资源操作的唯一入口,接受用户输入的命令,提供认证、授权、API注册和发现等机制
Scheduier:负责集群资源调度,按照预定的调度将Pod调度到相应的node节点上
ControllerManager:负责维护集群的状态,比如程序部署安排故障检测、自动扩展、滚动更新等
Etcd:负责储存集群中各种资源对象的信息

node:集群的数据平面,为容器提供运行环境

Kubelet:负责容器的生命周期,即通过docker,来创建、更新、摧毁容器
Kubeproxy:负责提供集群内部的服务发现即负载均衡
Docker:负责容器上的各种操作

k8s概念

Master:集群的控制器,每个集群至少有一个master节点负责管理集群的管理
Node:工作负载节点,由master分配容器到node工作节点上,然后master节点上的docker负责容器的运行
Pod:k8s的最小控制单元,容器都是在pod中的,一个pod可以有一个或多个容器
Controller:控制器,通过它来实现对pod的管理,比如启动、停止、伸缩pod的数量等
Service:pod对外的统一入口,可以维护同一类的多个pod
Label:标签,对于pod进行分类,同一类pod会拥有相同的标签
NameSpace:命名空间,用来隔离pod的运行环境

资源管理介绍

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

k8s本质上就是一个集群系统,用户可以在集群中部署各类服务,所谓部署服务,就是在k8s集群中运行一个个容器,并将指定的程序跑在容器中
因为k8s的最小单元是pod,所以只能将容器放在pod中,通过pod控制器来控制pod
pod可以提供服务后,就要考虑如何访问pod,所以k8s提供了service资源来实现

yaml语句介绍

yaml语法

1.大小写敏感 例如:c1和C1是两个不同变量

2.使用缩进表示层级关系

有缩进代表是其子属性,无缩进代表是并列关系

image-20250317101944711

image-20250317102002162

3.缩进不允许tab,只允许空格

4.缩进的空格数不重要,只要相同层级的元素左对齐即可

5.#代表注释

资源管理方式

命令式对象管理:直接用命令去操作k8s资源

kubectl run nginx-pod --image=nginx:1.17.1 --port=80
kubectl是一个工具的调用,run运行一个pod,pod的名字为nginx-pod,--image=nginx:1.17.1告诉你运行的式nginx的pod,--port代表暴露的端口

命令式对象管理:通过命令配置及文件配置去操作k8s资源

kubectl create/patch -f nginx-pod.yaml
用于创建和更新资源,如果nginx-pod.yaml这个pod不存在,则创建这个pod,如果这个pod存在则更新这个pod,同时还有删除等命令

声明式对象配置:通过apply命令和配置文件去操作k8s资源

kubectl apply -f nginx-pod.yaml
用于创建和更新资源,如果nginx-pod.yaml这个pod不存在,则创建这个pod,如果这个pod存在则更新这个pod,比起上面有局限性

image-20250317105858353

kubectl命令

kubectl是k8s集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化安装部署,具体如下

kubectl [command] [type] [name] [flags]

command:指定对资源执行的操作,例如create、get、daletee

type:指定资源类型,例如daployment,pod,service

name:指定资源的名称,大小写敏感

flags:指定额外的可选参数

#查看所有pod
kubectl get pod
​
#查看某个pod
kubectl get pod pod_name
​
#查看某个pod,并以yaml格式展示
kubectl get pod pod——name -o yaml

image-20250317110846240

image-20250317110939600

推荐使用方式

#创建/更新资源   使用声明式对象配置 kubectl apply -f XXX.yml
#删除资源       使用命令式对象配置 kubectl delete -f XXX.yml
#查询资源        使用命令式对象管理jubectl get 资源名称

实战入门

1.Namespace

在k8s集群中所有的pod都是互访的,若不想要两个pod互访,就可以将两个pod划分到不同的namespace

image-20250322202221755

kubectl get ns 查看所有的ns  #ns即namespace缩写
kubectl get pod -n * #-n用于指定的ns,表示获取*ns下的所有pod
-f 用于指定文件
kubectl apply ns dev  #创建一个名称为dev的命名空间
​
创建一个Namespace命令如下
#配置方式 首先准备一个yaml文件:ns-dev.yaml
apiVersion: v1    #指定API版本为v1
kind: Namespace   #资源类型,此处定义资源类型为命名空间
metadata:
 name: dev   #命名空间名称
随后创建yaml  kubectl apply -f ns-dev.yaml

2.Pod

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

# 命令格式: kubectl run (pod控制器名称) [参数]
# image  指定pod镜像
# --port  指定端口
# --namespace  指定namespace
​
编写一个pod-nginx.yaml
apiVersion: v1
kind: Pod  
metadata:
  name: ningx
  namespace: dev
spec:  #定义pod的具体规格
  containers:  #列出pod中的容器
   - image: nginx: 1.17.1
     imagePullPolicy: IfNotPresent  #表示当本地没有镜像时就从镜像仓库拉取
     name: pod  #指定容器名称
     ports:
      - name: nginx-port   #指定端口名称为nginx-port
        containerPort: 80  #指定监听端口为80
        protocol: TCP      #指定使用TCP协议
创建: kubectl apply -f pod-nginx.yaml

3.LABEl

Label的作用是在资源上添加标识,对它们进行分区和选择

Label的特点:

一个Label会以key/value键值对的形式添加到各种对象上,如Node,Pod,Service等

一个资源对象可以定义任意数量的Label

标签定义完毕后,需要考虑标签的选择,此时就要用到Label Selector,即:

Label用于给某个资源对象定义标识

Label Selector用于查询和筛选拥有某些标签的资源对象

当前有两种Label Selector

#基于等式的Label Selector
name = slave:选择所有包含Label中key=“name”且value=“slave”的对象
env != production:选择Label中所有包含key=“env”且value不等于“production”的对象
​
#基于集合的Label Selector
name in(master,salave):选择Label中所有包含key=“name"且value=”master"或的value=“slave”对象
name not in(frontend):选择Label中所有包含key=“name”且value不等于frotend
​
#标签可以同时使用多个,用逗号隔开即可,例如:
name=slave,env!=production
name not in(frontend),env!=produchtion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值