真实应用迁移到 Harbor 并由 Kubernetes 运行

前面我们已经完成了 Harbor(私有镜像仓库)的部署,并验证 Docker 可以正常 push(推送)和 pull(拉取)镜像。接下来进入更实用的一步:把一个真实 Web 应用打包成镜像,推送到 Harbor,再由 Kubernetes(K8s)拉取并运行。

一、实验目标

本阶段要完成的目标:

1. 创建一个自定义 Web 页面
2. 使用 Dockerfile(镜像构建文件)构建镜像
3. 将镜像推送到 Harbor(私有镜像仓库)
4. 使用 Kubernetes Deployment(部署)运行镜像
5. 使用 Service(服务)通过 NodePort(节点端口)暴露访问

最终访问地址:

http://172.16.11.142:30081
二、创建 Web 应用目录
mkdir -p ~/harbor-demo-web
cd ~/harbor-demo-web
三、创建首页文件
cat > index.html <<'EOF'



Kgale Harbor Demo

Harbor + Kubernetes + ChatGPT 部署成功!

这是 Kgale 和 ChatGPT 一起完成的真实应用镜像迁移实验。

这个页面来自 Harbor 私有镜像仓库。

镜像地址:172.16.11.142/library/kgale-web:v1



EOF

这个页面就是最终要运行在 Kubernetes(K8s)里的 Web 应用页面。

四、创建 Dockerfile
cat > Dockerfile <<'EOF' FROM nginx:latest COPY index.html /usr/share/nginx/html/index.html EOF 这份 Dockerfile(镜像构建文件)的作用是: 1. 使用 nginx:latest 作为基础镜像 2. 把自定义 index.html 放到 Nginx 默认网页目录 3. 生成一个自定义 Web 镜像 五、构建 Docker 镜像 sudo docker build -t kgale-web:v1 . 查看本地镜像: sudo docker images | grep kgale-web 六、给镜像打 Harbor 标签 sudo docker tag kgale-web:v1 172.16.11.142/library/kgale-web:v1 镜像地址含义: 172.16.11.142 Harbor 私有镜像仓库地址 library Harbor 项目名 kgale-web 镜像名称 v1 镜像版本标签 完整镜像地址: 172.16.11.142/library/kgale-web:v1 七、推送镜像到 Harbor sudo docker push 172.16.11.142/library/kgale-web:v1 推送成功后,进入 Harbor Web 面板查看: 项目 → library → 镜像仓库 → kgale-web 如果能看到 kgale-web:v1,说明镜像已经成功推送到 Harbor。 八、创建 Kubernetes 部署文件 cat > kgale-web.yaml <<'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: kgale-web spec: replicas: 1 selector: matchLabels: app: kgale-web template: metadata: labels: app: kgale-web spec: nodeName: k8s-master # 指定运行到 k8s-master 节点 tolerations: - operator: "Exists" # 容忍所有 Taint(污点),实验环境使用 containers: - name: kgale-web # Container(容器)名称 image: 172.16.11.142/library/kgale-web:v1 # Harbor 私有仓库镜像 ports: - containerPort: 80 # 容器内部端口 --- apiVersion: v1 kind: Service metadata: name: kgale-web-svc spec: type: NodePort # 使用 NodePort(节点端口)暴露服务 selector: app: kgale-web ports: - port: 80 # Service(服务)端口 targetPort: 80 # Pod(容器组)端口 nodePort: 30081 # 外部访问端口 EOF 这份 YAML(资源配置文件)包含两个资源: Deployment(部署):负责运行 Web 应用 Pod(容器组) Service(服务):负责把 Web 应用暴露给外部访问 九、部署到 Kubernetes kubectl apply -f kgale-web.yaml 成功输出: deployment.apps/kgale-web created service/kgale-web-svc created 十、查看运行状态 查看 Pod(容器组): kubectl get pods -o wide 成功运行后,可以看到类似输出: NAME READY STATUS RESTARTS AGE IP NODE kgale-web-fb7b97c5-lxcqx 1/1 Running 0 3s 10.244.235.213 k8s-master 重点看: 1/1 Running Pod(容器组)运行成功 k8s-master 运行在 k8s-master 节点 查看 Service(服务): kubectl get svc kgale-web-svc 输出示例: NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kgale-web-svc NodePort 10.105.118.115 80:30081/TCP 3s

这里的重点是:

80:30081/TCP

意思是:

Service(服务)内部端口是 80
外部访问端口是 30081
十一、浏览器访问测试

浏览器访问:

http://172.16.11.142:30081

如果页面正常打开,并看到:

Harbor + Kubernetes + ChatGPT 部署成功!

说明真实应用已经成功从 Harbor(私有镜像仓库)迁移到 Kubernetes(K8s)运行。

十二、实验结果

本阶段完成了:

1. 自定义 Web 应用创建成功
2. Docker Image(镜像)构建成功
3. 镜像推送到 Harbor 成功
4. Kubernetes Deployment(部署)创建成功
5. Pod(容器组)成功运行
6. Service(服务)通过 NodePort(节点端口)暴露成功
7. 浏览器成功访问 Web 页面

最终访问地址:

http://172.16.11.142:30081

最终镜像地址:

172.16.11.142/library/kgale-web:v1
十三、实验总结

这次实验完成了一个真实应用从本地构建到 Harbor,再由 Kubernetes 运行的完整流程。

完整链路如下:

自定义 Web 页面

Dockerfile(镜像构建文件)

Docker build(构建镜像)

Docker push(推送镜像)

Harbor(私有镜像仓库)

Kubernetes Deployment(部署)

Pod(容器组)Running(运行中)

Service(服务)NodePort(节点端口)

浏览器访问成功

这说明 Harbor 已经不只是能存放测试镜像,而是可以真正作为 Kubernetes 集群的私有镜像仓库使用。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇