2020-06-07-k8s

91 阅读3分钟

docker回顾

创建一个简单的Node.js应用

const http = require('http');
const os = require('os');

console.log("Kubia server starting...");
var handler = function(request,response){
console.log("Received request from"+request.connection.remoteAddress);
response.writeHead(200);
response.end("You've hit "+ os.hostname()+"\n");
};

var www = http.createServer(handler);
www.listen(8080);

为镜像创建Dockerfile

FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node","app.js"]

构建容器镜像

docker build -t kubia .
镜像构建的过程:用户告诉 Docker 需要基于当前目录(注意命令 结尾的点)构建一个叫 kubia 的镜像,Docker 会在目录中寻找 Dockerfile,然后基 于其中的指令构建镜像。

运行容器镜像

docker run --name kubia-container -p 8080:8080 -d kubia
这条命令告知Docker基于kubia镜像创建一个叫kubia-container的新容器。这个容器与命令行分离 (-d标志),这意味着在后台运行.
通过localhost:8080访问应用

获取更多容器信息

docker ps只会展示容器的大部分基础信息。可以使用docker inspect查看更多的信息。
docker inspect kubia-container Docker会打印出包含容器底层信息的长JSON。

探索容器内部

docker exec -it kubia-container bash
这会在已有的 kubia-container 容器内部运行bash。bash进程会和主容器进程拥有相同的命名空间。
-it选项是下面两个选项的简写:
• -i,确保标准输入流保待开放。需要在 shell 中输入命令。
• -t, 分配一个伪终端(TTY) 。
例如: 查询进程:ps -aux

停止和删除容器

docker stop kubia-container
docker rm kubia-container

向镜像仓库推送镜像

  • 使用附加标签标注镜像
    不会重命名标签,而是给同一个镜像创建一个额外的标签 docker tag kubia 1150079039/kubia
    源 目的
  • 向Docker Hub推送镜像 docker push 1150079039/kubia

配置kubernetes集群

用Minikube运行一个本地单节点kubernetes集群

Minikube是一个构建单节点集群的工具,对于测试kubernetes和本地开发应用都非常有用。

安装Minikube

github.com/kubernetes/…

使用Minikube启动一个kubernetes集群

minikube start

安装kubernetes客户端(kubectl)

要与kubernetes交互,还需要kubectl CLI客户端

使用kubectl查看集群是否正常工作

kubectl cluster-info

kubectl列出所有集群节点

kubectl get nodes
kubectl get命令可以列出各种kubernetes对象

查看对象更多信息

kubectl describe node gke-kubia

在kubernetes上运行第一个应用

部署Node.js应用

kubectl run kubia --image=1150079039/kubia --port=8080 -generator=run/v1
--image=1150079039/kubia 显示的是指定要运行的容器镜像,--port=8080选项告诉Kubernetes应用正在监昕8080端口。最后一个标志(--generator)需要解释一下,通常并不会使用到它,它让Kubernetes创建一个Replication Controller, 而不是Deployment。

列出pod

kubectl get pods

访问web应用

每个pod都有自己的IP地址,但是这个地址是集群内部的,不能从集群外部访问。要让pod能够从外部访问,需要通过服务对象公开它,要通过创建一个特殊的LoadBalancer类型的服务,将创建一个外部的负载均衡,可以通过负载均衡的公共IP访问pod。

创建一个服务对象

要创建服务,需要告知kubernetes对外暴露之前创建的ReplicationController(缩写为rc):
kubectl expose rc kubia --type=LoadBalancer --name kubia-http

列出服务

kubectl get service