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

2023-05-16

目录

  • 使用k3s快速搭建k8s
  • 安装k8s dashboard
  • 使用Helm部署K8S资源
  • k8s核心命令
    • 一切推倒重来
    • 资源创建方式
    • Namespace
    • Pod
    • Deployment
    • Service
    • Ingress
      • 解决官网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

如果使用kubectl命令报错,则执行如下命令
在这里插入图片描述

# 查看k3s服务运行情况,如果没运行就将他运行起来
systemctl status k3s

# 将k3s的配置暴露到环境变量
echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> /etc/profile

# 使环境变量生效
source /etc/profile

在这里插入图片描述

安装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,如果发现墙了连不上,那就使用二进制包方式安装,或者直接访问这个地址下载https://get.helm.sh/helm-v3.10.3-linux-amd64.tar.gz

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

解决官网Ingress安装不了问题

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

公司里的大牛组长教了一手:其实当包拉不下来的时候,一般可以配个代理,以clash for window为例,先记住这两个ip和端口
在这里插入图片描述
然后配置代理,可以先export试试看,如果不行再走下面方法

export http_proxy=http://192.168.80.1:7890
export https_proxy=http://192.168.80.1:7890
export no_proxy=localhost,127.0.0.1,docker-registry.example.com,.corp,

当export完之后,会发现curl、docker、kubectl等以前拉不动的包现在可以拉取了。上面配置的就是代理的IP和端口
如果这种方式无效,还可以通过如下方式

# 创建配置文件
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

# 添加配置
[Service]
Environment="HTTP_PROXY=http://192.168.80.1:7890"
Environment="HTTPS_PROXY=http://192.168.80.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp,"

# 重启容器
sudo systemctl daemon-reload
sudo systemctl restart docker

然后发现以前下不来的镜像等,现在可以下载了,这个时候如果使用kubectl还是没办法访问拉去的话,还可以整个活,那就是先用docker pull到本地,然后本地打tag,最后推送到自己的阿里云镜像服务上做个跳板。
在这里插入图片描述在这里插入图片描述
然后再将ingress-nginx的yaml里的images改成自己的aliyun镜像即可,最后构建即可成功!
在这里插入图片描述

使用方式

以nginx为例,创建三副本,并且修改nginx的主页名称区分开来,并创建service且为ClusterIP类型即可,使用ingress转发进行尾部访问

创建nginx的service和deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-dep-nginx
  name: my-dep-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-dep-nginx
  template:
    metadata:
      labels:
        app: my-dep-nginx
    spec:
      containers:
      - image: nginx
        name: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: service-nginx-clusterip
spec:
  type: ClusterIP
  selector:
    app: my-dep-nginx
  ports:
  - port: 3000
    targetPort: 80

创建ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-nginx-clusterip
                port:
                  number: 3000

示意图

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

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes学习-快速上手速查手册 的相关文章

随机推荐

  • npm install 出现错误 unable to access ‘https://github.com/adobe-webplatform/eve.git/‘:

    前言 xff1a 输入命令 npm install registry 61 https registry npm taobao org xff0c 出现错误 unable to access 39 https github com adob
  • Kubernetes初识

    一 Kubernetes是什么 xff1f xff08 一 xff09 读音 了解一个新事物 xff0c 最先学会都是怎么读 xff0c 不然以后会一直读错下去 xff0c 到时候说出去可能就会被人嘲笑 Kubernetes xff0c 读
  • Linux操作系统基本代码

    1 xff08 ls xff09 list 列出目录的所有项 ls 查看当前目录 xff08 ls l 文件路径 xff09 以详细模式查看 xff08 ls xff5e xff09 展示主目录文件 xff08 ls xff09 展示当前目
  • C语言 const、static、volatile等关键字的作用

    目录 前言 const static volatile extern 总结 前言 C语言里面有许多关键字 xff0c 本文结合我自己的了解简单讲讲几个常用关键字的作用 const 问 xff1a const有什么用 xff1f 答 xff1
  • 函数调用,中断以及进程切换,的现场保护的区别

    注意以下过程描述了两种armv7指令集的内核的中断表现 xff08 cortex A7和cortex m3 xff09 xff0c 但是cortex A7和cortex m3表现很不一样 xff0c 因为Cortex m3只有用户级和特权级
  • Cortex-M3 PendSV 中断 系统调用 说明

    参考 Cortex M3权威指南中文版 PendSV异常是和系统调用有些类似 xff0c cpu 需要手动将往NVIC 的PendSV 悬起寄存器中写1 xff0c 然后产生中断 xff0c 系统调用 xff08 SVC xff09 是co
  • 微积分的直观理解

    在微积分中 xff0c 我们进行定积分计算的时候一般是用牛顿莱布尼兹公式 xff0c 不定积分计算也类似 xff0c 都需要寻找原函数F x xff0c 但是如果想直观的理解微积分 xff0c 我们需要顺着公式的反方向进行理解 xff0c
  • Makefile中调用make命令,-C和-f选项的区别

    C选项 Makefile中 C是递归调用子目录中的Makefile xff0c C选项后跟目录 xff0c 表示到子目录下执行子目录的Makefile xff0c 顶层Makefile中的export的变量还有make默认的变量是可以传递给
  • 卡尔曼滤波

    标准卡尔曼滤波推导相关 预测 predict 更新 update 注意 xff0c 以下对于时间的下标 xff0c 有的时候用t有的时候用k xff0c 它们其实是一样的 xff0c 因为参考不同的资料 xff0c 所以写的比较乱 其中是隐
  • EM算法原理

    Notion The all in one workspace for your notes tasks wikis and databases
  • Android ko module compile 简介

    Notion The all in one workspace for your notes tasks wikis and databases
  • volatile c语言关键字 / cache / 内存一致性

    Notion The all in one workspace for your notes tasks wikis and databases
  • Qt中的QWidget::move函数

    QWidget move函数 原型 xff1a void move int x int y void move const QPoint amp 其中move的原点是父窗口的左上角 xff0c 如果没有父窗口 xff0c 则桌面即为父窗口
  • 欧拉角和万向节死锁

    一 什么是欧拉角 欧拉角就是物体绕坐标系三个坐标轴 xff08 x xff0c y xff0c z轴 xff09 的旋转角度 xff0c 在这里坐标系可以是世界坐标系 xff0c 也可以是物体坐标系 xff0c 旋转顺序也是任意的 xff0
  • 【freeRTOS内存管理策略详解】

    内存管理对应用程序和操作系统来说都非常重要 现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关 FreeRTOS操作系统将内核与内存管理分开实现 xff0c 操作系统内核仅规定了必要的内存管理函数原型 xff0c 而不关心这些内存管理函数
  • NGFF、M.2、PCIe、NVMe概念区分以及PCIEx1 x4 x8 x16区别

    对于NGFF M 2 PCIe NVMe等概念的说明 解决方案 NGFF Next Generation Form Factor xff0c 顾名思义 xff0c 是物理外形 Form Factor 的标准 与 NGFF 并列的是 2 5
  • 二重积分和雅可比行列式

    我们以二重积分为例进行说明 xff0c 首先说结论 xff1a 一 结论 若x 61 x u v y 61 y u v 存在偏导数 xff0c 则二阶雅可比行列式为 61 61 dxdy 61 J2 dudv J2的绝对值 且 其中积分区域
  • 雅可比行列式和雅可比矩阵

    接触雅可比行列式是在二重积分的变量变换中 xff0c 参见我的另一篇文章https blog csdn net xiaoyink article details 88432372 下面我们来详细说明一下雅可比行列式和雅可比矩阵 雅可比矩阵
  • jlink-v8 固件修复

    一 先说 jlink v8 v9 v10区别 v8基本价格在40左右 xff0c 芯片是atml的 xff0c 但是很多反应是掉固件和提示盗版问题 v9现在主流 xff0c 盗版价100左右 xff0c 主控芯片stm32 做的比较成熟 x
  • kubernetes学习-快速上手速查手册

    目录 使用k3s快速搭建k8s安装k8s dashboard使用Helm部署K8S资源k8s核心命令一切推倒重来资源创建方式NamespacePodDeploymentServiceIngress解决官网Ingress安装不了问题使用方式