bingoogolapple.github.io
bingoogolapple.github.io copied to clipboard
Kubernetes
安装 minikube
- 如需更新 minikube,需要更新 minikube 安装包
- minikube delete 删除现有虚机
- 删除 ~/.minikube 目录缓存的文件
- 重新创建 minikube 环境
- Minikube - Kubernetes本地实验环境 | Kubernetes 学习笔记之 MiniKube 安装 | 通过 Minikube 在本地运行 Kubernetes
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v0.28.1/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
minikube version
minikube
- 启动并设置 docker 加速镜像
minikube start --registry-mirror=https://registry.docker-cn.com
- 检测状态
minikube status
- 启动 kubernetes dashboard
minikube dashboard
- 执行节点服务器命令,例如查看节点 docker info
minikube ssh -- docker info
- 进入节点服务器
minikube ssh
- 关闭集群
minikube stop
- 删除集群
minikube delete
- 使用 Minikube Docker 守护进程
eval $(minikube docker-env)
- 取消使用 Minikube Docker 守护进程
eval $(minikube docker-env -u)
nginx 案例
- 运行一个 nginx 的 pod
kubectl run my-nginx --image=nginx:latest --port=80
- 导出运行的 nginx 服务
kubectl expose deployment my-nginx --type=NodePort
- 默认浏览器打开
minikube service my-nginx
- 使用 --url 属性获取服务的外部访问地址
minikube service my-nginx --url
- curl 访问测试
curl $(minikube service my-nginx --url)
- 进入运行中的容器
kubectl exec my-nginx-77f56b88c8-b4cnx -it /bin/sh
kubectl exec my-nginx-77f56b88c8-b4cnx -it bash
Node.js 案例
创建 Docker 容器镜像
- server.js
var http = require('http');
var handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World, hostname is ' + require('os').hostname());
};
var server = http.createServer(handleRequest);
server.listen(8080);
- Dockerfile
FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js
- 使用 Minikube Docker 守护进程,而不是将 Docker 镜像 push 到 registry,可以使用与 Minikube VM 相同的 Docker 主机构建镜像,以使镜像自动存在
eval $(minikube docker-env)
- 使用 Minikube Docker 守护进程构建 Docker 镜像
docker build -t hello-node:v1 .
创建 Deployment
- 创建 Deployment 来管理 Pod,指定复制数量为 3
kubectl run hello-node --image=hello-node:v1 --port=8080 --replicas=3
- 查看 Deployment
kubectl get deployments
- 查看 Pod
kubectl get pods
- 复制多个 pod
kubectl scale --replicas=6 deployment/hello-node
- 查看集群 events
kubectl get events
创建 Service
默认情况,Pod 只能通过 Kubernetes 群集内部 IP 访问。要使 hello-node 容器从 Kubernetes 虚拟网络外部访问,须要使用 Kubernetes Service 暴露 Pod
- 将 Pod 暴露到外部环境
kubectl expose deployment hello-node --type=NodePort
- 查看刚创建的 Service
kubectl get services
- 访问服务,浏览器自动打开
minikube service hello-node
- 查看 pods 日志
kubectl logs hello-node-658d8f6754-ptg7r
更新应用程序
- 编辑 server.js 文件以返回新消息
- 构建新版本镜像
docker build -t hello-node:v2 .
- Deployment 更新镜像
kubectl set image deployment/hello-node hello-node=hello-node:v2
- 查看更新后的结果
minikube service hello-node
清理删除
- 删除在群集中创建的资源
kubectl delete service hello-node
kubectl delete deployment hello-node