如何接入Kubernetes部署

2024-01-07

我已经创建了 Docker 映像,并部署在具有最少数量机器的 k8s 集群中,设置了一台主机和一台工作机,两台机器都已启动并运行,并使用相同的 VLAN 网络相互通信。

请查找以下 Pod 和部署服务以及所描述的状态

root@jenkins-linux-vm:/home/admin# kubectl describe services angular-service
Name:                     angular-service
Namespace:                pre-release
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"angular-service","namespace":"pre-release"},"spec":{"ports":[{"no...
Selector:                 app=frontend-app
Type:                     NodePort
IP:                       10.96.151.155
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31000/TCP
Endpoints:                10.32.0.6:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

root@jenkins-linux-vm:/home/admin# kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
angular-deployment-7b8d45f48d-b59pv   1/1     Running   0          51m

root@jenkins-linux-vm:/home/admin# kubectl get svc
NAME              TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
angular-service   NodePort   10.96.151.155   <none>        80:31000/TCP   64m


root@jenkins-linux-vm:/home/admin# kubectl get pods --selector="app=frontend-app" --output=wide
NAME                                  READY   STATUS    RESTARTS   AGE   IP          NODE               NOMINATED NODE   READINESS GATES
angular-deployment-7b8d45f48d-b59pv   1/1     Running   0          52m   10.32.0.6   poc-worker2   <none>           <none>

root@jenkins-linux-vm:/home/admin# kubectl describe pods angular-deployment-7b8d45f48d-b59pv
Name:         angular-deployment-7b8d45f48d-b59pv
Namespace:    pre-release
Priority:     0
Node:         poc-worker2/10.0.0.6
Start Time:   Tue, 21 Jan 2020 05:15:49 +0000
Labels:       app=frontend-app
              pod-template-hash=7b8d45f48d
Annotations:  <none>
Status:       Running
IP:           10.32.0.6
IPs:
  IP:           10.32.0.6
Controlled By:  ReplicaSet/angular-deployment-7b8d45f48d
Containers:
  frontend-app:
    Container ID:   docker://751a9fb4a5e908fa1a02eb0460ab1659904362a727a028fdf72489df663a4f69
    Image:          frontend-app:future-master-fix-d1afa608
    Image ID:       docker://sha256:0099587db89de9ef999a7d1f087d4781e73c491b17e89392e92b08d2f935ad27
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 21 Jan 2020 05:15:54 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-r67p7 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-r67p7:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-r67p7
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

现在的问题是我无法使用端口访问我的应用程序,即使它也无法在网络浏览器中工作。

curl http://<public-node-ip>:<node-port>

curl http://10.0.0.6:31000

Docker 文件

FROM node:latest as node
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build --prod

# stage 2
FROM nginx:alpine
COPY --from=node /app/dist/hello-angular /usr/share/nginx/html
root@jenkins-linux-vm:/home/admin# kubectl exec -it angular-deployment-7b8d45f48d-b59pv curl 10.96.151.155:80
curl: (7) Failed to connect to 10.96.151.155 port 80: Connection refused
command terminated with exit code 7
root@jenkins-linux-vm:/home/admin/kubernetes# kubectl run busybox --image=busybox --restart=Never -it --rm --command -- /bin/sh -c "wget 10.96.208.252:80;cat index.html"
Connecting to 10.96.208.252:80 (10.96.208.252:80)
saving to 'index.html'
index.html           100% |********************************|   593  0:00:00 ETA
'index.html' saved
<!doctype html><html lang="en"><head><meta charset="utf-8"><title>AngularApp</title><base href="/"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/x-icon" href="favicon.ico"><link href="styles.9c0ad738f18adc3d19ed.bundle.css" rel="stylesheet"/></head><body><app-root></app-root><script type="text/javascript" src="inline.720eace06148cc3e71aa.bundle.js"></script><script type="text/javascript" src="polyfills.f20484b2fa4642e0dca8.bundle.js"></script><script type="text/javascript" src="main.11bc84b3b98cd0d00106.bundle.js"></script></body></html>pod "busybox" deleted
root@jenkins-linux-vm:/home/admin/kubernetes# kubectl run busybox --image=busybox --restart=Never -it --rm --command -- /bin/sh -c "wget 10.0.0.6:32331;cat index.html"
Connecting to 10.0.0.6:32331 (10.0.0.6:32331)
wget: can't connect to remote host (10.0.0.6): Connection refused
cat: can't open 'index.html': No such file or directory
pod "busybox" deleted
pod pre-release/busybox terminated (Error)


我正在从 docker hub 获取预先构建的角度图像,感谢https://github.com/nheidloff/web-apps-kubernetes/tree/master/angular-app我们将使用该图像作为下面的基线。

使用下面的 yaml 创建、部署和服务

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: angular-app
spec:
  replicas: 1
  selector:
    matchLabels:
      run: angular-app
  template:
    metadata:
      labels:
        run: angular-app
    spec:
      containers:
      - name: angular-app
        image: nheidloff/angular-app
        ports:
        - containerPort: 80
        - containerPort: 443

服务.yaml

apiVersion: v1
kind: Service
metadata:
  name: angular-app
  labels:
    run: angular-app
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    protocol: TCP
    name: https
  selector:
    run: angular-app

在集群上按如下方式运行以创建资源

$ kubectl create -f Deployment.yaml
$ kubectl create -f Service.yaml

应该会产生以下部署和服务配置

    $ kubectl get all -o wide
NAME                               READY   STATUS    RESTARTS   AGE     IP            NODE         NOMINATED NODE   READINESS GATES

pod/angular-app-694d97d56c-7m4x4   1/1     Running   0          8m23s   10.244.3.10   k8s-node-3   <none>           <none>

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE     SELECTOR
service/angular-app   NodePort    10.96.150.136   <none>        80:32218/TCP,443:30740/TCP   8m23s   run=angular-app
service/kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP                      8d      <none>

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS    IMAGES                  SELECTOR
deployment.apps/angular-app   1/1     1            1           8m23s   angular-app   nheidloff/angular-app   run=angular-app

NAME                                     DESIRED   CURRENT   READY   AGE     CONTAINERS    IMAGES                  SELECTOR
replicaset.apps/angular-app-694d97d56c   1         1         1       8m23s   angular-app   nheidloff/angular-app   pod-template-hash=694d97d56c,run=angular-app

从上面我们可以看到pod正在运行node-3,因此识别节点3的ip 我们看到该服务已暴露在端口 32218/TCP 和 30740/TCP 以下

$ kubectl get nodes -o wide
NAME           STATUS   ROLES    AGE   VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master-1   Ready    master   8d    v1.17.0   111.112.113.107   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2
node-1     Ready    <none>   8d    v1.17.0   111.112.113.108   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2
node-2     Ready    <none>   8d    v1.17.0   111.112.113.109   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2
node-3     Ready    <none>   8d    v1.17.0   111.112.113.110   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2

所以我们需要访问应用程序vinode3:NodePort i.e 111.112.113.110:32218作为网址,请检查下面的屏幕截图以及我如何访问该应用程序。

我在集群级别打开以下规则,以允许浏览器访问默认 NodePort 范围上的应用程序。

注意:入口 IPv4 TCP 30000 - 32767 0.0.0.0/0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何接入Kubernetes部署 的相关文章

随机推荐

  • 在具有多个模块(如 JHipster)的项目中嵌套角度组件

    我试图在另一个实体组件中显示一个实体组件 我在网上找到了一些关于共享模块的信息 我也检查了这个post https stackoverflow com questions 42284351 jhipster 4 how to put ent
  • 使用服务器变量配置 URL 重写以支持多个源

    几天前我正在处理 CORS 问题 我需要支持多个来源 我做了一些研究 发现有几篇文章向我介绍了这个很棒的工具 URL 重写 我按照 Paco Zarate 提示得到了我想要的解决方案 具有多个域的访问控制允许来源 https stackov
  • $new = new self($data);带有私有函数甚至变量oO?

    我的 php 5 3 有一个奇怪的行为 我有一个类在函数中执行此操作 new new self data new gt setServiceManager this gt service new gt cacheInstance 但是函数c
  • 确定Linux键盘事件设备

    这另一个问题 从 Linux 输入设备访问按键 https stackoverflow com questions 20943322 accessing keys from linux input device 提供了有关如何在没有按下其他
  • 访问 numpy 数组中元素的属性

    我有一个充满对象 dtype object 的numpy数组cftime class In 1 a Out 1 array cftime DatetimeNoLeap 2000 1 1 11 29 59 999996 5 1 cftime
  • 什么是终结符和非终结符?

    我正在读 雷布尔 维基百科页面 https en wikipedia org wiki Rebol 解析表达式是用 parse 方言编写的 与 do 方言一样 它是数据交换方言的面向表达式的子语言 与 do 方言不同 parse 方言使用表
  • 如何在 Keras 中添加常量张量?

    我想做的是向网络的输出添加一个常量张量 inputs Input shape config N FRAMES IN SEQUENCE config IMAGE H config IMAGE W config N CHANNELS cnn V
  • 删除满足条件的一半数据帧行

    我希望根据条件提取数据帧的子集 比方说 df pd Dataframe Col1 values1 Col2 values2 Col3 values3 我想按 Col2 排序 在 Col2 中的负条目 如果有的话 中 我想删除最大的一半 因此
  • 使用 LINQ 从数据集中选择行,其中 RowsID 列表位于 List

    首先我必须说 我是一个使用 LINQ 的新手 实际上我以前从未使用过 但我有一个任务需要使用来自列表的值来过滤数据表 所以我想知道是否可以在 LINQ 中使用列表中的值作为过滤器值来查询数据表 有人可以给我一些提示 谢谢 执行此操作的最佳方
  • Flutter 图像选择器无法从相册/图库中选择图像

    我正在尝试在我的应用程序中实现 imagepicker 库 我的应用程序运行没有任何错误 但我无法从相册 图库中选取 选择图像 选择图像后 应用程序应在正文中显示图像 但没有任何反应 我必须点击 取消 才能返回主屏幕 我还应该提到控制台返回
  • JavaScript 图像调整大小

    有谁知道如何使用 JavaScript 按比例调整图像大小 我尝试通过添加属性来修改 DOMheight and width即时运行 但似乎在 IE6 上不起作用 要按比例修改图像 只需更改宽度 高度 CSS 属性之一 将另一个设置为自动
  • 从 Windows 命令行获取文件夹大小

    在 Windows 中 是否可以在不使用任何第三方工具的情况下从命令行获取文件夹的大小 我想要与右键单击 Windows 资源管理器 属性中的文件夹时获得的结果相同的结果 有一个内置 Windows 工具为了那个原因 dir s Folde
  • 如何避免锯齿并提高性能?

    In this 堆栈溢出答案 https stackoverflow com a 9709724 2345484事实证明 C 中的别名会降低代码速度 C 中的别名不仅适用于指针 还适用于引用 更普遍地适用于标准指定的这些类型 https s
  • ajax POST 后无法访问 JQuery $(this)?

    假设我有一堆共享点击事件的链接 a href class do stuff Click me a a href class do stuff Click me a a href class do stuff Click me a a hre
  • 使用 Utf8Json 库序列化时排除空字段?

    使用以下方法将 POCO 序列化为 JSON 字符串时 有什么方法可以忽略空字段Utf8Json图书馆 我有一个ToString我在外部使用的下面的类中的方法 所以我想看看是否有任何方法可以在进行序列化时排除空字段 基本上我不希望序列化后
  • 禁用 gcc 对不兼容选项的警告

    我很好奇是否有一个选项可以禁用 gcc 关于参数对正在编译的语言无效的警告 Ex cc1 warning command line option Wno deprecated is valid for C Java ObjC but not
  • 如何在显示 jQuery ui 选项卡时插入 JavaScript?

    我想在我的页面上运行 JavaScript 函数 但仅限于显示选项卡时 其实有两个问题 我没有使用 ajax 选项卡 那么如果我只想在显示选项卡后运行代码 我会将 JavaScript 放入 加载 或 显示 回调中吗 根据上面的答案 我的代
  • IE 和 Firefox 中的文本大小不同

    为什么 IE 中的文本比 Firefox 中的文本稍大 宽 示例 顶部是 IE 渲染文本的方式 底部是 FF Image http www dreamscape hu text jpg 在 CSS 中声明为 Arial 16px 的文本 我
  • 如何将 Xamarin Forms Shell 集成到 MvvmCross 设置中

    我打算将 Xamarin Forms 与 MvvmCross 一起使用 根据他们的tutorial https www mvvmcross com documentation tutorials tipcalc a xamarin form
  • 如何接入Kubernetes部署

    我已经创建了 Docker 映像 并部署在具有最少数量机器的 k8s 集群中 设置了一台主机和一台工作机 两台机器都已启动并运行 并使用相同的 VLAN 网络相互通信 请查找以下 Pod 和部署服务以及所描述的状态 root jenkins