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 -
如果只想单节点安装到此步骤就可以完成看到如下命令说明安装成功
如果想要搭建k8s集群则在要当master的主机上执行/var/lib/rancher/k3s/server/node-token
获取K3S_TOKEN
然后在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
设置访问端口
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
将type:ClusterIP
改为type: NodePort
然后查看端口kubectl get svc -A |grep kubernetes-dashboard
创建访问账号
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
使用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方式滚动更新又可以通过 maxSurge
和 maxUnavailable
字段来控制升级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
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