- 一、前言
- 二、资源创建
- 1、命令行
- 2、配置文件
- 3、可视化界面
- 三、命名空间
- 1、命令行
- 2、配置文件
- 四、Pod
- 1、命令行
- 2、配置文件
- 3、`Kubernetes Dashboard`可视化界面中操作
- 五、Deployment
- 1、多副本
- a、命令行
- b、配置文件
- c、`Kubernetes Dashboard`可视化界面中操作
- 2、扩缩容
- 方式1
- 方式2
- 方式3
- 3、自愈&故障转移
- 4、滚动更新
- 5、版本回退
- 6、其它工作负载
- 六、Service
- 命令行
- 配置文件
- 1、ClusterIP
- a、命令行
- b、配置文件
- 2、NodePort
- a、命令行
- b、配置文件
- 七、Ingress
- 1、安装
- 2、使用
- a、域名访问
- b、路径重写
- c、流量限制
- 八、存储抽象
- 1、环境准备
- a、所有节点
- b、主节点
- c、从节点
- d、原生方式数据挂载
- 2、 PV&PVC -- 挂载目录
- a、创建pv池
- b、PVC创建与绑定
- 3、ConfigMap -- 挂载配置文件
- 1、将配置文件创建为配置集
- 2、创建Pod
- 3、查看
- 4、修改ConfigMap
- 5、检查配置是否更新
- 4、Secret -- 保存密码等敏感数据
- 运维(5) Windows10专业版安装K8s
- 运维(29) CentOS7.6通过KubeOperator部署Kubernetes集群
- 运维(33) CentOS7.6通过Kubeadm部署Kubernetes集群
二、资源创建 1、命令行可参考 https://www.yuque.com/leifengyang/oncloud/ctiwgo
# ex: # kubectl create ns hello2、配置文件
# ex: # kubectl apply -f xxx.yaml3、可视化界面 三、命名空间
1、命令行隔离资源
# 查看命名空间 kubectl get ns # 查看默认命名空间`default`下的应用 -- 如果操作不指定命名空间,默认都是放在`default`命名空间下 kubectl get pods # 查看所有命名空间下的应用 kubectl get pods -A # 查看指定命名空间`xxx`下的应用 kubectl get pods -n xxx # 创建命名空间 `zhengqingya` kubectl create ns zhengqingya # 删除 -- 会将其下所有应用删除 kubectl delete ns zhengqingya2、配置文件
cat <四、Pod 1、命令行运行中的一组容器,Pod是kubernetes中应用的最小单位。
# 创建一个叫 `mynginx` 的 `nginx` 容器 kubectl run mynginx --image=nginx # 查看`default`空间的Pod kubectl get pod # 如果应用未运行,可查看描述信息,看看应用执行相关事件处理 # kubectl describe pod Pod名 kubectl describe pod mynginx # 删除 kubectl delete pod mynginx # 查看运行日志 kubectl logs -f mynginx # 输出更完善的信息 -- 每个Pod,k8s都会分配一个ip 集群中的任意机器都能访问 kubectl get pod -owide # 查看 curl 10.0.169.136:80 # 进入容器 kubectl exec -it mynginx -- /bin/bash2、配置文件cat <一个Pod部署多个容器
tips: 无法部署多个相同容器,会出现端口占用问题!
cat <3、Kubernetes Dashboard可视化界面中操作 切换到指定命名空间下 -> + -> 输入并创建
查看日志
五、Deployment
控制Pod,使Pod拥有多副本,自愈,扩缩容等能力
kubectl create deployment my-dep-nginx --image=nginx # 新开一个窗口:每隔1秒运行 查看数据 watch -n 1 kubectl get pod # 删除应用 kubectl delete pod my-dep-nginx-xxx # 然后在新开的窗口查看应用会自己在删除后 再次启动 => 自愈能力 # 下面方式创建的应用删除后不会自自启动 kubectl run mynginx --image=nginx kubectl delete pod mynginx # 查看部署 kubectl get deploy # 删除部署`my-dep-nginx` kubectl delete deploy my-dep-nginx1、多副本 a、命令行# 启动3份副本,会在工作机器中随机部署 ex: 机器1部署2份 机器2部署1份 如果其中一个应用蹦了,会再随机启动一个,保证存在3个副本 kubectl create deployment my-dep-nginx --image=nginx --replicas=3b、配置文件# 删除命令行部署的`my-dep-nginx` kubectl delete deploy my-dep-nginx cat <c、Kubernetes Dashboard可视化界面中操作 切换到指定命名空间下 -> + -> 从表单创建
2、扩缩容 方式1
# 将之前部署的3份 扩展到 5份 kubectl scale deploy/my-dep-nginx --replicas=5 # 缩容 kubectl scale deploy/my-dep-nginx --replicas=2 # 查看 kubectl get pod方式2# 修改 `replicas` 值 即可 kubectl edit deploy my-dep-nginx # 查看 kubectl get pod方式3Kubernetes Dashboard可视化界面中操作
3、自愈&故障转移
以下情况
- 停止容器
- 删除Pod
- 容器崩溃
- 宕机
- …
其下的应用会再自启动一份到集群下任意工作机器 => 自愈&故障转移
# 模拟:在工作机器上停掉应用 docker stop xxx # 监控 -- 展示应用的状态变化过程 kubectl get pod -w4、滚动更新上次部署版本v1;这次部署版本v2,会先启动v2版本的新应用,等新应用启动成功之后,再杀死旧应用v1。
kubectl create deployment my-dep-nginx --image=nginx --replicas=2 # 部署新版本 kubectl set image deploy/my-dep-nginx nginx=nginx:1.21.6 --record # 查看变更进度 kubectl rollout status deploy/my-dep-nginx5、版本回退v2版本回退到v1版本
# 历史记录 kubectl rollout history deployment/my-dep-nginx # 查看某个历史详情 kubectl rollout history deployment/my-dep-nginx --revision=2 # 回滚 -- 上次 kubectl rollout undo deploy/my-dep-nginx # 回滚 -- 指定版本 kubectl rollout undo deploy/my-dep-nginx --to-revision=1 # 监控 -- 展示应用的状态变化过程 kubectl get pod -w # 查看是否回退到之前版本 -- 看image镜像版本确认 kubectl get deploy/my-dep-nginx -oyaml | grep image6、其它工作负载
https://kubernetes.io/zh/docs/concepts/workloads/controllers
六、Service
- Deployment: 无状态应用部署 ex: 微服务
- StatefulSet: 有状态应用 ex: redis
- DaemonSet: 守护型应用部署 ex: 日志收集组件
- Job: 定时任务部署 ex: 垃圾清理组件
- …
命令行将一组Pods公开为网络服务的抽象方法;Pod的服务发现与负载均衡。
# 暴露Deploy => 将目标服务端口80暴露为8000 kubectl expose deploy my-dep-nginx --port=8000 --target-port=80 # 查看已暴露的服务 kubectl get service # 访问 -- ip方式 curl 10.96.23.211:8000 # 访问 -- service域名方式 # 进入容器 curl 服务名.命名空间.svc:8000 curl my-dep-nginx.default.svc:8000 # 删除已暴露的服务 kubectl delete service my-dep-nginx # 使用标签检索Pod kubectl get pod -l app=my-dep-nginx配置文件
cat <1、ClusterIP a、命令行用于集群内部访问
# 等同于没有`--type`,即上面方式 kubectl expose deploy my-dep-nginx --port=8000 --target-port=80 --type=ClusterIP # 删除 kubectl delete service my-dep-nginxb、配置文件cat <2、NodePort a、命令行用于集群外部访问,NodePort范围在 30000-32767 之间
kubectl expose deploy my-dep-nginx --port=8000 --target-port=80 --type=NodePort # 删除 kubectl delete service my-dep-nginx访问:http://集群任意IP:端口
b、配置文件cat <七、Ingress 1、安装Service的统一网关入口
https://kubernetes.io/zh/docs/concepts/services-networking/ingress
https://github.com/kubernetes/ingress-nginxwget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml # 修改镜像 # image: k8s.gcr.io/ingress-nginx/controller:v0.46.0@sha256:52f0058bed0a17ab0fb35628ba97e8d52b5d32299fbc03cc0f6c7b9ff036b61a # 变更为 # image: registry.cn-hangzhou.aliyuncs.com/zhengqing/ingress-nginx-controller:v0.46.0 vim deploy.yaml # 创建 kubectl apply -f deploy.yaml # 查看安装是否安装完成 kubectl get pod -A # 检查安装的结果 kubectl get pod,svc -n ingress-nginx # 安装完成之后,查看Service暴露端口 kubectl get svc -A访问
2、使用
- https://集群任意IP:32248
- http://集群任意IP:31424
准备测试环境
cat <a、域名访问 cat <访问
hosts域名切换工具 https://github.com/oldj/SwitchHosts
b、路径重写
- foo.bar.com:31424 => service1
- bar.foo.com:31424 => service2 – ingress层返回404
- bar.foo.com:31424/nginx => service2 – nginx层返回404
https://kubernetes.github.io/ingress-nginx/examples/rewrite
cat <访问 bar.foo.com:31424/nginx => bar.foo.com:31424 即访问nginx根路径
c、流量限制
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#rate-limiting
cat <频繁访问 limit.ingress.com:31424 会出现503
八、存储抽象
1、环境准备 a、所有节点以NFS作为存储层为例
节点之间互相同步数据# 所有机器安装 yum install -y nfs-utilsb、主节点# nfs主节点 echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports mkdir -p /nfs/data # 设置开机自启 & 现在启动 -- 远程绑定服务 systemctl enable rpcbind --now # nfs服务 systemctl enable nfs-server --now # 配置生效 exportfs -r # 查看 exportfsc、从节点# 查看远程机器有哪些目录可以同步 -- 使用master机器ip地址 showmount -e 192.168.101.20 # 执行以下命令挂载 nfs 服务器上的共享目录到本机路径 mkdir -p /nfs/data # 同步远程机器数据 mount -t nfs 192.168.101.20:/nfs/data /nfs/data测试
# 在任意机器写入一个测试文件 echo "hello nfs server" > /nfs/data/test.txt # 在其它机器查看数据 cat /nfs/data/test.txtd、原生方式数据挂载master机器执行
# 先创建共享目录 mkdir -p /nfs/data/nginx-pv cat </nfs/data/nginx-pv/index.html tips: 如果删除服务,挂载的数据是不会删除的!
# 删除 kubectl delete -f nginx-nfs.yaml # 查看挂载数据 cat /nfs/data/nginx-pv/index.html2、 PV&PVC – 挂载目录
- PV:持久卷(Persistent Volume),将应用需要持久化的数据保存到指定位置 ex: /nfs/data/nginx-pv
- PVC:持久卷申明(Persistent Volume Claim),申明需要使用的持久卷规格 ex: 申请10MB
a、创建pv池ex: pv01给10MB pv02给1GB pv03给3GB;
- 静态供应: 提前申请创建,而非要多大就动态创建多大。
- 当一个pvc来申请10MB的时候,会给一个pv01的合适空间,而不是给pv02。
- 如果删除pod和其下pvc时,关联pv01空间也会被回收。
- 如果之后内容增长超过pv0x规定的空间大小将会报错。
master机器执行
# nfs主节点创建3个文件夹 mkdir -p /nfs/data/01 mkdir -p /nfs/data/02 mkdir -p /nfs/data/03创建PV
cat <b、PVC创建与绑定 master机器执行
创建PVC
cat <创建Pod绑定PVC
cat </nfs/data/03/index.html 3、ConfigMap – 挂载配置文件
1、将配置文件创建为配置集抽取应用配置,并且可以自动更新。
redis示例# 创建redis配置文件 cat <apiVersion: v1 data: # data是所有真正的数据 redis.conf: | # key:默认是文件名 appendonly yes # value:配置文件的内容 kind: ConfigMap metadata: name: redis-conf namespace: default2、创建Podcat <3、查看 kubectl exec -it redis -- /bin/bash cat /redis-master/redis.conf4、修改ConfigMapkubectl edit cm redis-conf5、检查配置是否更新等一会儿查看配置,发现会自动将配置同步过来
kubectl exec -it redis -- /bin/bash cat /redis-master/redis.conf # 此配置需要redis重启之后才会生效 -- 原因:redis中间件自身无此配置热更新功能 redis-cli 127.0.0.1:6379> CONFIG GET appendonly 127.0.0.1:6379> CONFIG GET requirepass4、Secret – 保存密码等敏感数据
Secret 对象类型用来保存敏感信息,ex:密码、OAuth令牌、SSH密钥。
# 命令格式 kubectl create secret docker-registry docker-secret-zhengqingya --docker-server=镜像仓库服务器 --docker-username=用户名 --docker-password=密码 --docker-email=邮箱地址 # ex: kubectl create secret docker-registry docker-secret-zhengqingya --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=zhengqingya --docker-password=xxx --docker-email=xxx@qq.com # 查看 kubectl get secret kubectl get secret docker-secret-zhengqingya -oyaml # 对密码进行base64解密查看 echo 'emhxxxnLg==' | base64 --decode测试
cat <
今日分享语句:
生活可以是甜的,也可以是苦的,但不能是没味的。你可以胜利,也可以失败,但你不能屈服。



