Kubernetes学习笔记(二):使用Kubernetes和Docker

创建、运行及共享容器镜像

我们尝试创建一个简单的应用,并在k8s中部署和运行它。

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

  1. 创建一个名为helloworld的文件夹,然后进入文件,创建一个app.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);

代码清晰地说明了实现的功能。这里在8080端口启动了一个HTTP服务器。服务器会以状态码200 OK和文字"You’ve hithostname:"来响应每个请求。

  1. 为镜像创建名为Dockerfile文件,内容如下:
FROM node:7
ADD app.js /app.js
ENTRYPOINT [ "node", "app.js" ]

为了把应用打包成镜像,首先需要创建一个叫Dockerfile的文件,它包含了一系列构建镜像时会执行的指令。Dockerfile文件需要和app.js文件在同一目录。

构建容器镜像

在helloworld目录下,执行如下命令:

# docker build -t <镜像名:版本号> <项目所在目录, .表示当前目录>
docker build -t kubia:v1 .

# 查看创建的镜像
docker images

运行容器镜像

docker run --name k1 -p 8080:8080 -d kubia:v1

# 查看创建的容器
docker ps

# docker ps只会展示容器的大部分基础信息。可以使用docker in inspect查看更多的信息。会打印出包含容器底层信息的长JSON。
docker inspect k1
  • 访问应用,通过浏览器访问localhost:8080,或者执行如下命令
curl localhost:8080

探索运行容器的内部

# 进入docker容器内部
docker exec -it k1 bash

# 查看容器中运行的进程信息
ps aux |grep app.js

在这里插入图片描述

# 退出容器,在系统中执行命令
ps aux |grep app.js

在这里插入图片描述

此时我们仍然能找到容器内的进程,这证明了运行在容器中的进程是运行在主机操作系统上的。

停止和删除容器

# 停止容器
docker stop k1
# 删除容器
docker rm k1

向镜像仓库推送镜像

现在构建的镜像只可以在本机使用。为了在任何机器上都可以使用,可以把镜像推送到一个外部的镜像仓库。为了简单起见,不需要搭建一个私有的镜像仓库,而是可以推送镜像到公开可用的镜像中心。这里我们使用阿里云 的镜像中心。

1. 创建阿里云账号、登录

  • 创建阿里云账号、登录。
  • 进入控制台、搜索“容器镜像服务”并进入。

2. 创建个人实例并进入,然后创建命名空间

在这里插入图片描述

3. 创建镜像仓库

创建镜像仓库完成后,点击管理,查看镜像信息。可以看到,如何登陆,拉取,推送等。

在这里插入图片描述

4. 在本地docker上登录阿里云仓库

docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com

# 查看登录信息
cat /root/.docker/config.json

5. 推送镜像到阿里云

docker tag e56bbdd6fb8d registry.cn-hangzhou.aliyuncs.com/xylearn/kubia:v1

docker push registry.cn-hangzhou.aliyuncs.com/xylearn/kubia:v1

在阿里云中可以查看到上传的镜像

在这里插入图片描述

在k8s上部署Node.js应用

部署步骤

# 从阿里云拉取kubia镜像
docker pull registry.cn-hangzhou.aliyuncs.com/xylearn/kubia:v1

# 将docker镜像导入kind
kind load docker-image registry.cn-hangzhou.aliyuncs.com/xylearn/kubia:v1

# 创建pod
kubectl run kubia --image=registry.cn-hangzhou.aliyuncs.com/xylearn/kubia:v1 --port=8080

# 查看pods,可以看到pods处于running状态,表示pod正常启动了
kubectl get pods

在这里插入图片描述

# 查看pod详细信息
kubectl describe pods kubia

# 此时我们直接连8080端口是访问不了部署的应用的。我们需要将本地网络端口转发到pod的8080端口
kubectl port-forward kubia 8888:8080

# 在另一个终端中,向pod发送一个http请求,结果如下
curl localhost:8888

在这里插入图片描述

后台实现过程

下图展示了部署node.js应用的后台实现过程。

  • 执行docker push registry.cn-hangzhou.aliyuncs.com/xylearn/kubia:v1,docker将镜像推送到阿里云镜像仓库。

  • 执行命令kubectl run kuba --image=registry.cn-hangzhou.aliyuncs.com/xylearn/kuba:v1 --port=8080后,kubectl向Kubernetes的主节点发送一个REST HTTP请求。

  • 主节点创建了一个新的pod,调度器将其调度到一个工作节点上。

  • 对应工作节点的Kubelet收到通知,就告知Docker从镜像中心中拉取指定的镜像。下载镜像后,Docker创建并运行容器。

在这里插入图片描述

参考资料

附录

kind常用命令

# 将docker镜像导入kind
kind load docker-image registry.cn-hangzhou.aliyuncs.com/xylearn/kubia:v1

# 将镜像my-image加载到特定的kind节点(例如名为kind-2的节点):
kind load docker-image my-image --name kind-2

# 导出的镜像压缩包(例如/my-image-archive.tar)加载到kind中
kind load image-archive /my-image-archive.tar

# 删除cluster
kind delete clusters <cluster name>

# 创建cluster
kind create cluster

# 根据配置文件multi.yaml创建cluster
kind create cluster --name multi-node --config=multi.yaml

# 查询集群
kind get clusters

minikube常用命令

# 在 minikube 中构建一个容器镜像
minikube image build -t <IMAGE_NAME> .

# 将镜像加载到 minikube 中
minikube image load kuba:v1

# 查询本地镜像
minikube image ls

# 拉取镜像
minikube image pull <IMAGE_NAME>

# 推送镜像
minikube image push <IMAGE_NAME>

# 删除本地镜像
minikube image rm image <IMAGE_NAME>

# 把minikube的镜像保存到docker中
minikube image save <IMAGE_NAME>

# 为镜像打标签(修改镜像名和版本)
minikube image tag <old image> <new image>
  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值