bingoogolapple.github.io icon indicating copy to clipboard operation
bingoogolapple.github.io copied to clipboard

Kubernetes

Open zytx121 opened this issue 7 years ago • 4 comments

安装 kubectl

brew install kubernetes-cli
kubectl version

zytx121 avatar Jul 21 '17 09:07 zytx121

安装 minikube

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

bingoogolapple avatar Sep 27 '18 06:09 bingoogolapple

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)

bingoogolapple avatar Sep 27 '18 06:09 bingoogolapple

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

bingoogolapple avatar Sep 27 '18 08:09 bingoogolapple

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

bingoogolapple avatar Sep 27 '18 08:09 bingoogolapple