本来今天应该发pod,但内容太多还没整完,就直接把部署这个发出来吧.

真现做,非存货.

本文ai含量较低,血泪含量较多

Depolyment

管理无状态应用,支持多副本,滚动更新,版本回滚等

Deployment可以定义命名空间,副本的管理,以及管理的pod及其模板

以一个软件生命周期来加深对此资源的理解

源码获取

可以使用 git clone 命令,源码包中需要有dockerfile文件

构建镜像

docker build -t <name>:<tag> .

docker build读取当前目录下的 Dockerfile,根据其中的指令一步步生成镜像。

  • -t--tag 的缩写,用来给生成的镜像起一个名字(name:tag 格式)。
    👉 镜像名称
    👉 镜像的标签(tag),可以用来区分不同版本,比如 v1latest 等。

最后的 . 表示 构建上下文路径(build context),即告诉 Docker:

  • Dockerfile 文件在哪里
  • 构建时需要用到的文件(比如 requirements.txt、项目源码)在哪里

. 即当前目录。

(推送镜像仓库)

由于网络限制,不执行此命令,采用镜像打包传输给其他节点的形式:

镜像已经在一台机器上构建好了,不想上传到远程仓库(比如 DockerHub 或 Harbor),但是希望在同一个 K8s 集群的其他节点(虚拟机)上也能使用。

可以 直接拷贝镜像 tar 包拷贝到其他节点导入即可:

# 在已有镜像的节点上
docker save -o myimage.tar myimage:tag

# 拷贝到其他节点
scp myimage.tar root@node2:/tmp/

# 在其他节点导入
docker load -i /tmp/myimage.tar

导入后,kubectl 调度 Pod 到这些节点时就能直接使用这个镜像。

插曲

气死我了!!!

docker bulid之后docker images查不到!再bulid一下又看到了!想改标签又说没这个东西!
问半天说是docker不管,要用containerd,用containerd查又说去用docker
最后看见是磁盘爆了!!!!!!

WHAT CAN I SAY !!!!!!!1

昨晚刚用的lvextend -lr 正好用上了!!!

我一点也不开心!!!!!!!!!1

结果还有地狱绘图:杀了我无数dashboard,含泪清除

以及

不小心把 v1 打成了 vi,这不会影响构建的镜像,只是名字/标签写错了。

给已有镜像重新打 tag ✅
不用重新构建,直接改个名字即可:

# 先查看镜像
docker images

# 给 django-blog:vi 镜像重新打一个 tag
docker tag <name>:<tag> <name>:<tag>

# 如果不想要旧的标签,可以删除它
docker rmi <name>:<tag>

这样镜像就会变成 django-blog:v1

部署 !


root@cka-master:~/test/kube_learn/book1/chapter4# kubectl get pods,deployment,service -n blog -o wide
NAME                               READY   STATUS    RESTARTS   AGE   IP              NODE          NOMINATED NODE   READINESS GATES
pod/blog-6bd447d5c8-9r4hh   1/1     Running   0          35s   172.16.245.17   cka-worker2   <none>           <none>
pod/blog-6bd447d5c8-vnvf5   1/1     Running   0          35s   172.16.93.201   cka-worker1   <none>           <none>
pod/blog-6bd447d5c8-xcw7x   1/1     Running   0          35s   172.16.245.16   cka-worker2   <none>           <none>

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES           SELECTOR
deployment.apps/blog   3/3     3            3           35s   web          django-blog:v1   app=log

NAME                  TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service/blog   NodePort   10.108.44.32   <none>        80:32434/TCP   35s   app=log

流下感动的泪水

使用busybox测试!

root@cka-master:~# kubectl run --rm --image=busybox:1.28 -n blog -it testpod
If you don't see a command prompt, try pressing enter.
/ # nslookup django-blog
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      django-blog
Address 1: 10.108.44.32 django-blog.blog.svc.cluster.local
/ # wget -qO- http://django-blog
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

--rm :退出自动删除
--image :指定镜像为busybox(一个精简linux,工具较全,适合调试网络存储等)
-n :指定命名空间
-it :进入其中!
testpod :pod名

wget -qO- http://django-blog
  • wget:一个常用的下载工具,可以从 HTTP/HTTPS/FTP 协议获取内容。
  • -q:安静模式 (quiet),不会打印下载过程中的详细信息。
  • -O-:把下载的内容输出到标准输出 (stdout),而不是保存到文件里。其中 -O 是指定输出文件名,- 代表输出到终端。
    👉 http://django-blog 发送一个 HTTP 请求,并把返回的内容直接输出到终端(不保存成文件,也不显示下载进度)。
    这在 Kubernetes 里常用于 测试服务是否能访问,比如你在 Pod 里执行这个命令:

因为service使用的是nodeport,不仅能从集群内通过clusterip及其暴露的端口访问,还能直接从集群外部通过 主机名:映射端口 访问!
外部主机测试!

OOOOO!

已严肃部署

PS:附上8.13开始统计的专注时长,小里程碑了.这周锁死手机感觉只能说"不坏",因为感觉每天也没有学点什么,什么也记不住,要不就是处理各种报错问半天ai:包括之前的vmware出问题,昨晚写csa练习主机网络连接一直掉反复刷新才能用ssh,今早的虚拟机磁盘爆了.学的内容也都是很基础的应用,一看就会一问就忘,也做不出来真正像样的东西.但至少不像之前刷互联网那那样过了一天好像看了很多又好像什么也没看但就是停不下来,停下来也不会去干正事那种状态了.

嗯,只能说"没浪费时间就是赢",解决报错也是必要的成本,先这样骗自己吧.

其实这么一周过下来感觉还挺不错的,很充实,学的东西也不是那种高中的纯碰出题人思路的纯八股,敲键盘其实还挺好玩.有种"修行"的感觉,至于未来怎么样,"天知道".

写这么些玩意挺累人的,真正有些想法的时候敲着敲着就忘了,以后也不会经常写这种心情记录吧.

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐