- 约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 之间通信