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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

使用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成功之前先不删除旧版本的所有podpod还是可以提供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"

datadata是所有真正的数据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
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s