minikube + kubectl 基础实践

  • 约601字
  • 技术
  • 2019年6月7日

在 MacBook Pro 上安装了 minikube,对照例子熟悉了 k8s(kubernetes) 的基本操作,包括创建集群、部署应用、负载均衡、应用扩容、应用升级(回滚)。

安装 minikube 和 kubectl

  • 安装 minikube: 从 github 下载二进制文件后,复制到 /usr/local/bin/
  • 安装 virtualBox: 集群会安装在虚拟机里
  • 安装 kubectl: 从 github 下载二进制文件后,复制到 /usr/local/bin

hello minikube

  • 启动 minikube

    minikube start

  • 查看 dashboard UI

    minikube dashboard

  • 创建 deployment

    kubectl create deployment hello-node --image=yanxi/demo

  • 查看状态

    kubectl get deploy
    kubectl get pod
    kubectl describe pod
    
  • 创建 service

    kubectl expose deployment hello-node --type=LoadBalancer --port=8080

  • 查看 service 状态

    kubectl get service

  • 自动打开浏览器访问 service

    minikube service hello-node

  • 清除 service

    kubectl delete service hello-node

  • 清除 deployment

    kubectl delete deployment hello-node

  • 停止 minikube 虚拟机

    minikube stop

  • 删除虚拟机 VM

    minikube delete

minikube 常见命令

  • 启动 minikube start
  • 停止 minikube stop
  • 删除 minikube delete
  • minikube 虚拟机 ip 地址 minikube ip
  • 登录到 minikube 虚拟机 minikube ssh

kubectl 常用命令

  • kubectl cluster-info

  • kubectl get (node|deploy|service|pod), 增加 -o wide 可以查看更多信息

  • kubectl describe ...

  • 获得 pod name

    {% raw %}

    export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
    echo Name of the Pod: $POD_NAME
    

    {% endraw %}

  • 查看 pod/container 日志 kubectl logs ...

  • 在 pod/container 中执行 kubectl exec ..., 例如:

kubectl exec -ti $POD_NAME curl localhost:8080
kubectl exec $POD_NAME env
kubectl exec -ti $POD_NAME bash
  • 给 pod 增加新的 label kubectl label pod $POD_NAME version=v1
  • 删除 service, 例如
kubectl delete service
kubectl delete service -l xxx=yyy

扩展应用程序 (Scaling)

  • 查看 deploy 情况
$ kubectl get deploy
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
hello-node   1/1     1            1           12h
  • replicas 修改成 4 kubectl scale deployments/hello-node --replicas=4
$ kubectl get deploy
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
hello-node   4/4     4            4           12h

滚动更新应用程序(zero downtime upgrade)

  • 更新 image kubectl set image deployments/hello-node demo=yanxi/demo:v2
  • 验证更新情况

{% raw %}

kubectl get pod
kubectl get deploy hello-node

export NODE_PORT=$(kubectl get services/hello-node -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
curl $(minikube ip):$NODE_PORT

kubectl rollout status deployment/hello-node

{% endraw %}

  • 回滚 kubectl rollout undo deployments/hello-node, 验证更新情况同上

网络模型

集群包含 3 个网络:

  • 节点网络(k8s 构造之前就存在)
  • Pod 网络(虚拟网络,每个 Pod 有独立的 IP)
  • Service 网络(虚拟网络,通过 kube-proxy 配置为 iptables 或 ipvs 规则)

主要存在 4 种类型通信:

  • Pod 内容器间通信
  • Pod 之间的通信
  • Pod 与 Service 间通信
  • 集群外部流量同 Service 之间通信
标签 :

相关文章

图书城整体迁移至阿里云完毕

经过一个多星期的调试,图书城网站及所有后台程序这周已经完全迁移到阿里云上去了。 之前的云服务器60G硬盘不出意料的在迁移2天后就满了,所以刚又增加了200G磁盘空间,和第一块数据磁盘一样,仍需要另行挂载。

查看更多

试用并感受 sina app engine

最近看到越来越多的网站和应用搭建在 SAE 上,这两天抽空看了下。今天下载了SAE的开发工具,写了个简单的hello world,又安装了这个WordPress博客系统,觉得还是挺有意思的。

查看更多

每天更新公众号的秘密:如何做到日更?

每天更新公众号不仅能逼迫自己持续学习,还能显著提高表达能力,并帮助建立个人品牌。本文分享了一些日更的经验和方法,希望对你有所启发。

查看更多