kubernetes系列(二) - kubectl的入门操作

1. 安装 / 卸载

1 .1 前提条件#

  • homebrew安装kubectl

  • docker本身设置镜像加速

  • 以下操作如果失败,开启ssr的全局模式进行再次操作

1.2 安装方式#

  • homebrew【不好使】

  • 二进制【参照如下的链接】

Minikube - Kubernetes本地实验环境

1.3 卸载#

Copy
# 停止集群 minikube stop ​ # 清理minikube本地状态 minikube delete # 通过homebrew卸载 brew uninstall minikube

2. 通过 minikube 学习 k8s 实操基础

2.1 创建集群#

Copy
# 二进制安装minikube curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.9.2/minikube-darwin-amd64 \ && chmod +x minikube && sudo mv minikube /usr/local/bin/ # 创建minikube集群【使用阿里的镜像】 # !!这一句之后,kubectl还会被配置为默认使用minikube!! minikube start --image-mirror-country cn \ --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.9.0.iso \ --registry-mirror=https://rnbhv8m8.mirror.aliyuncs.com # 完成后,查看minikube状态 minikube status # 打开本地dashboard minikube dashboard

2.2 部署应用#

  • deployment会帮我们创建pod

  • pod运行在一个私有的,隔离的网络上。默认情况下可以被同一个集群的其他【pod】和【service】所访问到,但是外部网络无法访问,需要通过service来暴露给外部

Copy
# 创建第一个deployment【deployment会自动创建一个pods】 kubectl create deployment codepie --image=lzw5399/codepiefe:20200423. # 获取deployments信息 kubectl get deploy【或者全称deployments】 # 获取deploy创建的pod信息 kubectl get pods # 临时地,允许通过api访问api-server # 通过以下链接访问具体的pod: # [http://localhost:8001/api/v1/namespaces/default/pods/具体的pod_name/proxy/](http://localhost:8001/api/v1/namespaces/default/pods/具体的pod_name/proxy/) kubectl proxy 【Starting to serve on 127.0.0.1:8001】

2.3 探索当前应用【故障排除】#

Copy
1 # 获取资源 2 kubectl get pods 3 # 显示当前pod的详细状态信息 4 kubectl describe pods 5 # 显示当前pod的日志 6 kubectl logs codepie-677c5c9c56-wk4qn【pod名字】 7 # 针对某个pod执行一个命令 8 # 显示当前pod内部的环境变量 9 kubectl exec codepie-677c5c9c56-wk4qn -- env 10 # 进入到pod内部 11 kubectl exec -ti codepie-677c5c9c56-wk4qn -- bash

2.4 公开暴露应用#

  • 思路就是创建service来将pod转发出去

  • 创建service的方式

  1. kubectl expose deployment/{depoly_name} --type="NodePort" --port 80【这个port是docker容器内部的端口】
  2. kubectl create service nodeport codepie --tcp=80: 80 【create这个 80 : 80 】
  3. kubectl create -f xxx.yaml 【不推荐】
  4. kubectl apply -f xxx.yaml【推荐】
Copy
# 通过上面的方式之一来建立起service # 访问, 或者直接在浏览器中直接访问下面的地址 # minikube ip是minikube帮我们创建的虚拟机的ip,对应着正式k8s中的pod所在node的外网ip curl $(minikube ip):{向外暴露的端口}

2.5 使用label#

Copy
# 打label kubectl label pod {pod_name} {key}={value} # 根据label来获取 kubectl get po -l {key}={value}

2.6 扩容应用#

  • 适用于无状态应用,将一个应用扩容多个实例

  • 扩容后,service会有一个均衡负载的功能,将请求发送到相同实例的不同的pod

  • 还支持自动缩放,但是超出了本教程的范围

  • 一旦运行了多个应用程序的多个实例,就可以在不停机的情况下滚动更新

Copy
# 获取所有的deploy部署的容器实例个数 # 【DESIRED】期望的个数 【CURRENT】实际的个数 kubectl get rs 【ReplicaSet】 # 将deploy/codepie 的实例扩容成四个 # 缩容就改一下 replicas 的数值就好了 kubectl scale deploy/codepie --replicas= 4 # 以下几个都可以查看到实例变成四个 kubectl get po -o wide kubectl get rs kubectl get deploy

2.7 更新应用#

  • 多个实例的情况下可以滚动不停机更新,且允许以下操作:
  1. 通过更新docker image,更新应用程序
  2. 回顾到以前的版本
  3. CI/CD, 停机时间为 0
  • 默认情况下,在更新过程中的【不可用pod的最大数量】和【可以创建新的pod的最大数量】都为 1。这两个选项都可以配置为数字或者百分比
  • 更新过程中,service会仅将流量负载到【可用的pod】
Copy
# 更新deploy对应的image # 格式 kubectl set image deploy/{depoly_name} {docker镜像的后半部分名字}={新的image} kubectl set image deploy/codepie codepiefe=lzw5399/codepiefe:20200410. # 打印滚动更新中的状态信息 kubectl rollout status deploy/codepie # 回滚到指定版本,不加--to-version则回滚到上一个版本 kubectl rollout undo deploy/codepie --to-revision= 2 # 查看状态 kubectl describe po

其他章节
Kubernetes系列(一) - kubernetes入门基本概念

posted @   宝树呐  阅读(1317)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
CONTENTS