kubernetes学习-快速上手速查手册

news2024/12/23 11:29:44

目录

  • 使用k3s快速搭建k8s
  • 安装k8s dashboard
  • 使用Helm部署K8S资源
  • k8s核心命令
    • 一切推倒重来
    • 资源创建方式
    • Namespace
    • Pod
    • Deployment
    • Service
    • Ingress
    • ConfigMap
    • Job
    • 数据持久化
      • 搭建NFS
      • PV和PVC

使用k3s快速搭建k8s

官网地址https://www.rancher.cn/k3s/

k3s是一个轻量级的k8s,拥有k8s的全生命周期,部署快速,两行命令即可搞定,降低k8s繁琐的部署环节,适合进行k8s学习和个人使用。

安装脚本,可以使用如下方法加速安装

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

如果只想单节点安装,到此步骤就可以完成,看到如下命令说明安装成功

image-20230113092022756

如果想要搭建k8s集群,则在要当master的主机上执行/var/lib/rancher/k3s/server/node-token获取K3S_TOKEN

image-20230113093749804

然后在work节点上执行curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

其中myserver为你的master节点的IP地址,K3S_TOKEN为你的master节点的token

安装k8s dashboard

官网地址https://github.com/kubernetes/dashboard

进行安装

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

image-20230113094022518

设置访问端口

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboardtype:ClusterIP改为type: NodePort然后查看端口kubectl get svc -A |grep kubernetes-dashboard

image-20230113094206559

创建访问账号

vim dashboard-adminuser.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

获取token进行登录

kubectl -n kubernetes-dashboard create token admin-user

image-20230113094334247

使用Helm部署K8S资源

安装方式

官网地址https://helm.sh/zh/docs/intro/install/

最简单的方式安装curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash,如果发现墙了连不上,那就使用二进制包方式安装

helm上可以配置多个源来从不同的地方下载资源,官网支持的资源都能从这个网站中搜到https://artifacthub.io/

用helm安装资源

具体操作看官网步骤很详细

helm repo add my-repo https://charts.bitnami.com/bitnami
helm install my-release my-repo/nginx

同时也可以使用这个网站,进行快速的资源安装:https://www.kubebiz.com/

k8s核心命令

一切推倒重来

kubectl delete deployment,service,pods --all

资源创建方式

命令行

YAML文件,使用kubectl apply -f xxx.yaml

Namespace

命名空间用来隔离资源

命令行方式

kubectl create ns hello
kubectl delete ns hello

YAML方式

apiVersion: v1
kind: Namespace
metadata:
  name: hello

Pod

一句话说明

pod是K8s中创建和管理的、最小的可部署的计算单元

命令行方式

kubectl run mynginx --image=nginx

YAML方式

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mynginx
  name: mynginx
  namespace: default
spec:
  containers:
  - image: nginx
    name: mynginx

kind:要创建的资源类型

metadata.labels:标签信息

metadata.name:要创建的pod名字,这个名字需要是唯一的

spec.containers:要运行的容器的名称和镜像名称。镜像默认来源是DockerHub

常用命令

kubectl get pod :查看default名称空间的pod

kubectl describe pod名字 pod名字:查看pod描述

kubectl delete pod pod名字:删除pod

kubectl logs --follow pod名字:查看pod的运行日志

kubectl get pod -owide:查看pod的详细信息如IP和类型

kubectl exec pod名字 命令:执行命令到pod

kubectl port-forward pod名字名字 外部映射端口:pod内部想要映射端口 --address 0.0.0.0:外部访问pod内部端口

Deployment

一句话说明

控制Pod,使Pod拥有多副本,自愈,扩缩容等能力

常用命令

kubectl get svc -A :查看deployment信息

多副本

命令行方式

kubectl create deployment my-dep --image=nginx --replicas=3

YAML方式

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-dep
  template:
    metadata:
      labels:
        app: my-dep
    spec:
      containers:
      - image: nginx
        name: nginx

kind:要创建的资源类型

metadata.labels:标签信息

metadata.name:要创建的Deployment名字,这个名字需要是唯一的

spec.replicas:部署的 pod 副本数量

selector:表示将deployment和pod关联起来的方式

selector.matchLabels:表示deployment会管理所有labels=my-dep的pod

template:相关内容用来定义pod资源相关

template.metadata.labels:来和selector.matchLabels定义的信息关联起来,来表明pod是被deployment管理,这里不需要为pod指定名称,是因为deployment会主动创建pod唯一的名字

扩缩容

命令行方式

kubectl scale --replicas=5 deployment/my-dep

修改YAML方式,修改replicas

kubectl edit deployment my-dep

滚动更新

可以保证在新版本部署pod成功之前,先不删除旧版本的所有pod,pod还是可以提供pod能力。大多数情况下都会采用RollingUpdate方式,滚动更新又可以通过 maxSurgemaxUnavailable 字段来控制升级pod的速率

命令行方式

kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record
kubectl rollout status deployment/my-dep

YAML方式

修改 kubectl edit deployment/my-dep 

版本回退

# 历史记录
kubectl rollout history deployment/my-dep

# 查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2

# 回滚(回到上次)
kubectl rollout undo deployment/my-dep

# 回滚(回到指定版本)
kubectl rollout undo deployment/my-dep --to-revision=2

存活探针

暂时未使用,待更新

就绪探针

暂时未使用,待更新

Service

一句话说明

将一组pod公开为网络服务的抽象方法,为deployment创建的pod提供稳定的访问地址

命令行方式

#暴露Deploy
kubectl expose deployment my-dep --port=8000 --target-port=80

YAML方式

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  selector:
    app: my-dep
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80

ClusterIP

使用k8s集群的内部IP暴露服务,当只需要让集群中运行的其他应用程序访问pod时,使用这种类型的Service。

命令行方式,等同于没有–type的

kubectl expose deployment my-dep --port=80 --target-port=80 --type=ClusterIP

YAML方式

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-dep

NodePort

通过每个节点上的 IP 和静态端口(NodePort)暴露服务,这样就可以在外部访问了,如果想要外部访问使用这种。NodePort范围在 30000-32767 之间

命令行方式

kubectl expose deployment my-dep --port=8000 --target-port=80 --type=NodePort

YAML方式

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-dep

Ingress

官网地址https://github.com/kubernetes/ingress-nginx

目前遇到pull失败问题,待研究更新

ConfigMap

一句话说明

抽取应用配置,并且可以自动更新

命令行方式

# 创建配置,redis保存到k8s的etcd;
kubectl create cm redis-conf --from-file=redis.conf

yaml方式

apiVersion: v1
kind: ConfigMap
metadata:
  name: k8s-conf
  namespace: default
data:
  CM_KEY: "CM_VALUE"

data:data是所有真正的数据,key:默认是文件名 value:配置文件的内容

修改ConfigMap

会自动更新配置

Job

待更新,部署Flink On K8S时更新

数据持久化

搭建NFS

所有节点安装

yum install -y nfs-utils

主节点

#nfs主节点
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports

mkdir -p /nfs/data
systemctl enable rpcbind --now
systemctl enable nfs-server --now

#配置生效
exportfs -r

从节点

# nfs主节点的IP
showmount -e 192.168.80.100

#执行以下命令挂载 nfs 服务器上的共享目录到本机路径 /root/nfsmount
mkdir -p /nfs/data

mount -t nfs 192.168.80.100:/nfs/data /nfs/data

# 写入一个测试文件
echo "hello nfs server" > /nfs/data/test.txt

测试数据挂载

测试案例:将nginx的pod应用数据持久化保存

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: label-nginx-pv-demo
  name: name-nginx-pv-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-pv-demo
  template:
    metadata:
      labels:
        app: nginx-pv-demo
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
        - name: html
          nfs:
            server: 192.168.80.80
            path: /nfs/data/nginx-pv

image-20230115173455823

PV和PVC

一句话说明

PV:持久卷(Persistent Volume),将应用需要持久化的数据保存到指定位置
PVC:持久卷申明(Persistent Volume Claim),申明需要使用的持久卷规格

静态供应

#nfs主节点
mkdir -p /nfs/data/01
mkdir -p /nfs/data/02
mkdir -p /nfs/data/03

创建PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01-10m
spec:
  capacity:
    storage: 10M
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/01
    server: 192.168.80.80
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv02-1gi
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/02
    server: 192.168.80.80
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv03-3gi
spec:
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/03
    server: 192.168.80.80

PVC创建与绑定

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi
  storageClassName: nfs
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: app-nginx-deploy-pvc
  name: name-nginx-deploy-pvc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-deploy-pvc
  template:
    metadata:
      labels:
        app: nginx-deploy-pvc
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
        - name: html
          persistentVolumeClaim:
            claimName: nginx-pvc

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

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

相关文章

【SpringCloud12】Gateway服务网关

1.概述简介 1.1官网 1.Zuul 1.X 2.Gateway 1.2是什么 Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关替代Zuul,那就…

uboot下识别FAT32格式的U盘报错:## Valid DOS partition found ##

1、出错的现象 (1)U盘被格式成FAT32文件系统,在Windows和Linux系统中都可以正常识别并挂载,在uboot下可以正常识别但是不能挂载; (2)在uboot下使用usb命令可以探测到U盘,但是用fatls、fatinfo等命令去挂载U盘时会失败,…

Spring MVC+Spring+Mybatis实现支付宝支付功能

本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始。 本…

永磁同步电机(PMSM)磁场定向控制(FOC)转速环PI调节器参数整定

文章目录前言一、调节器的工程设计方法二、转速环PI调节器的参数整定2.1.转速环的结构框图2.2.典型II型系统2.3.转速环PI参数整定计算公式三、转速环PI调节器设计实例3.1.永磁同步电机磁场定向的转速外环电流内环双闭环控制3.2.转速环PI参数计算3.3.仿真分析总结前言 本章节采…

【2022年度总结2023新年Flag】--2022:高考失利,我奋力奔跑的大一上;2023,朝着成为更优秀的自己迈进ing

🌱博主简介:是瑶瑶子啦,一名大一计科生,目前在努力学习C进阶,JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛! ✈往期博文回顾:【C语言篇】请把这篇文章推给现在还对指针一知半解的童鞋超生动图解,详…

linux w5500 驱动及使用

1、驱动 驱动来源: a. 内核:linux内核w5500驱动,包含两个源文件w5100.c和w5100-spi.c /kernel/drivers/net/ethernet/wiznet/w5100.c kernel/drivers/net/ethernet/wiznet/w5100-spi.c kernel/drivers/net/ethernet/wiznet/w5100.h 可通过make menuconfi…

Django 入门学习

记录Django入门学习过程 1 基本环境 安装virtualenv pip3.9 install virtualenv 使用命令行创建 创建一个项目 virtualenv dj 进入虚拟环境 cd dj/bin source ./activate 进入成功后bash前面显示括号 安装 Django pip install django3.0.6 安装成功后之星django-…

创建者模式

1.单例模式 单例模式能够保证一个类只有一个实例,并且提供一个可以访问该实例的全局节点 实现步骤 类中添加一个私有静态成员变量用于保存单例实例声明一个公有静态构建方法用于获取单例实例在静态方法中实现"延迟初始化"。 该方法会在首次被调用时创建一…

【云原生kubernetes】k8s中pod使用详解

一、前言 在之前k8s组件一篇中,我们谈到了pod这个组件,了解到pod是k8s中资源管理的最小单位,可以说Pod是整个k8s对外提供服务的最基础的个体,有必要对Pod做深入的学习和探究。 二、再看k8s架构图 为了加深对k8s中pod的理解&#x…

ARM PWM 定时器与实战

一、什么是定时器(timer) 1、定时器是 SoC 中常见外设 (1) 定时器与计数器。计数器是用来计数的(每隔一个固定时间会计一个数);因为计数器的计数时间周期是固定的,因此到了一定时间只要用计数值计数时间周…

contex-m基于IAR工程从boot阶段引导app

目录 1.修改工程 2.修改代码 Boot代码 App代码 3.修改FM33LG04x.icf 4.修改IAR工程icf配置路径 5.修改FM33LG04X.icf链接文件 6.编译工程 7.查看map文件 8.调试程序 1.修改工程 本次调试的demo为《UART0 DMA发送_串口中断示例》,以下修改都是基于该工程&…

初始C语言 - 函数

C语言中函数的分类: 1.库函数:C语言自带的函数,包含大量频繁使用的功能 2.自定义函数:有些库函数没有的,需要程序员自己设计一、库函数通过MSDN、cplusplus.com、cppreference.com这些网站,查看学习函数的作用和用法在使用库函数时…

portswigger靶场中目录遍历

portswigger靶场中目录遍历1.Bp靶场介绍1.1.访问靶场1.2.注意事项2.目录变量漏洞2.1.文件路径遍历2.1.1.开启靶场2.1.2.点击详情2.1.3.抓包2.1.4.修改参数2.1.5.过关2.2.用绝对路径旁路阻止遍历序列2.2.1.开启靶场2.2.2.修改参数2.2.3.过关2.3.非递归地剥离遍历序列2.3.1.开启靶…

Windows下让Qt5 QCamera响应UVC摄像头硬件按钮拍图

QCamera相机类提供了一些基本的功能,包括拍照和录制功能(Windows不支持录制视频),但也有很多接口是没有封装的,比如有些UVC摄像头有物理按键,可以进行拍图等操作,但是QCamera没法响应硬件按钮的…

通信原理与MATLAB(十五):码间干扰和无码间干扰条件

目录1.码间干扰2.无码间干扰条件2.1 时域条件2.2 频域条件3.满足无码间干扰条件的滤波器3.1 理想低通滤波器3.2 余弦滚降滤波器4.不同滚降系数的余弦滚降滤波器时频域图4.1 代码4.2 结果图5.理想低通滤波器和升余弦滚降滤波器(α1)对比1.码间干扰 如下图所示,码间干…

Vue 基础之侦听器

Vue 基础之侦听器描述侦听器侦听器的创建侦听器的应用选项immediate 选项deep 选项未使用 deep 选项使用 deep 选项侦听目标对象中的单个属性描述 项目描述IDEVScode操作系统Windows 10 专业版Vue.js2.6.12 侦听器 侦听器允许开发者对数据进行监视,并指定数据发生…

数据分析-深度学习 Pytorch Day4

一:概述当你想训练好一个神经网络时,你需要做好三件事情:一个合适的网络结构,一个合适的训练算法,一个合适的训练技巧:合适的网络结构:包括网络结构和激活函数,你可以选择更深的卷积…

打工人必学的法律知识(四)——《中华人民共和国劳动法》

中华人民共和国劳动法http://www.npc.gov.cn/npc/c30834/201901/ffad2d4ae4da4585a041abf66e74753c.shtml 目录 第一章 总  则 第二章 促进就业 第三章 劳动合同和集体合同 第四章 工作时间和休息休假 第五章 工  资 第六章 劳动安全卫生 第七章 女职工和未…

大数据技术之Hadoop(HDFS)——超详细

第1章 HDFS概述 1.1 HDFS产出背景及定义 1)HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文…

误删照片音视频文件不要担心 几种方法解救慌乱的你 别再病急乱投医啦 [附软件]

误删照片音视频文件不要担心 几种方法解救慌乱的你 方法1:从手机相册中恢复手机删除的照片 这里以vivo手机为例,其他手机也是差不多的 相册->右上角三个点->设置->云空间 进入云存储空间 点击云盘->我的备份->就能看到你自动上传的照片 相册-&…