二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nexus系列文章

  • Jenkins系列文章

  • ELK笔记

  • Kubernetes笔记

    • 手动部署kubernetes-1-8-6集群

    • 其他姿势快速部署

    • 手动搭建k8s-1-10-4高可用集群(推荐版).md

    • 基础学习

      • k8s整体架构的知识整理
      • 配置kubectl命令补全功能
      • k8s基本使用入门-使用Pod
        • 1,创建一个 nginx 的 pod。
        • 2,进入到 pod。
        • 3,查看 pod 详细信息。
        • 4,访问 pod。
      • k8s基本使用入门-了解ReplicationController
      • k8s基本使用入门-了解ReplicaSet
      • k8s基本使用入门-了解deployments
      • k8s基本使用入门-了解Service
    • 从新出发

  • LLM专题

  • 系列专题
  • Kubernetes笔记
  • 基础学习
二丫讲梵
2018-12-07
目录

k8s基本使用入门-使用Pod

文章发布较早,内容可能过时,阅读注意甄别。

注:此文档根据慕课网 k8s 视频教程学习整理而成。

# 1,创建一个 nginx 的 pod。

定义了一个 nginx.yaml 的文件:

[root@master pod-basic]$cat pod_nginx.yml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13

其中定义了版本,类型,名称,镜像,端口等等。

现在来启动它:

[root@master pod-basic]$kubectl create -f pod_nginx.yml
pod "nginx" created
1
2

简单查看一下状态:

[root@master pod-basic]$kubectl get pod
NAME      READY     STATUS    RESTARTS   AGE
nginx     1/1       Running   0          25s
1
2
3

可以看到命名为 nginx 的 pod 起来了,1/1 表示只有一个。

查看详细状态:

[root@master pod-basic]$kubectl get pods -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP            NODE
nginx     1/1       Running   0          1m        10.244.1.18   node
1
2
3

又能看到 pod 的 ip(10.244.1.18),以及所被分配到的节点(node)。

# 2,进入到 pod。

如何进入到这个 pod 呢。

[root@master pod-basic]$kubectl exec -it nginx bash
root@nginx:/# ls
bin   dev  home  lib64    mnt  proc  run     srv  tmp  var
boot  etc  lib     media    opt  root  sbin  sys  usr
1
2
3
4

这样以来就直接进入到 pod 对应的容器里边来了,如果这个 pod 里边含有多个容器,那么默认是进入到第一个容器当中,如果想要进入到其他容器,那么看下命令帮助信息:

[root @ master pod-basic] $ kubectl exec --help

在容器中执行命令。

例子:

  #默认情况下,使用第一个容器从pod 123456-7890中运行'date'输出
  kubectl exec 123456-7890 date

  #从pod 123456-7890获取ruby-container中运行'date'的输出
  kubectl exec 123456-7890 -cruby-container日期

  #切换到原始终端模式,将stdin发送到pod 123456-7890的ruby-container中的'bash'
  #并将stdout / stderr从'bash'发送回客户端
  kubectl exec 123456-7890 -c ruby-container -i -t - bash -il

  #从pod 123456-7890的第一个容器中列出/ usr的内容,并按修改时间排序。
  #如果要在pod中执行的命令有任何共同的标志(例如-i),
  #您必须使用两个破折号( - )来分隔命令的标志/参数。
  #另请注意,不要用引号括起命令及其flags / arguments
  #除非你正常执行它(即,执行ls -t / usr,而不是“ls -t / usr”)。
  kubectl exec 123456-7890 -i -t - ls -t / usr

选项:
  -c, - container ='':容器名称。如果省略,将选择pod中的第一个容器
  -p, - pod ='':Pod名称
  -i, - stdin = false:将stdin传递给容器
  -t, - t = false:Stdin是TTY

用法:
  kubectl exec POD [-c CONTAINER] - COMMAND [args ...] [options]

使用“kubectl options”获取全局命令行选项列表(适用于所有命令)。
可以通过-c的选项进行指定。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 3,查看 pod 详细信息。

查看 pod 的详细信息:

[root@master pod-basic]$kubectl describe pods nginx
Name:         nginx
Namespace:    default
Node:         node/192.168.106.5
Start Time:   Sat, 10 Nov 2018 14:40:33 +0800
Labels:       app=nginx
Annotations:  <none>
Status:       Running
IP:           `10.244.1.18`,那么我们访问一下:


Containers:
  nginx:
    Container ID:   docker://5f35902dbaaf035fa420bab8a2a409660c4ed2b2753a7d2fc298b9d7971a0d33
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:d59a1aa7866258751a261bae525a1842c7ff0662d4f34a355d5f36826abc0341
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 10 Nov 2018 14:40:55 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-rp4h8 (ro)
Conditions:
  Type           Status
  Initialized    True
  Ready          True
  PodScheduled   True
Volumes:
  default-token-rp4h8:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-rp4h8
    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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 4,访问 pod。

现在看到这个 pod 在集群中的 ip 是10.244.1.18,那么我们访问一下:

[root@master pod-basic]$curl 10.244.1.18
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

发现在集群当中访问都是可以的,但是我们这个 nginx 部署之后,是想要让外部人员能够访问的,那么这个时候就要用的 kubectl 的port-forward了。

先看看介绍:

[root @ master pod-basic] $ kubectl port-forward --help
将一个或多个本地端口转发到pod。

使用资源类型/名称(例如deployment / mydeployment)来选择pod。如果省略,资源类型默认为“pod”。

如果有多个符合条件的广告连播,则会自动选择广告连播。转发会话结束时
选定的pod终止,并且需要重新运行该命令才能恢复转发。

例子:
  #在本地侦听端口5000和6000,将数据转发到容器中的端口5000和6000
  kubectl port-forward pod / mypod 5000 6000

  #在本地侦听端口5000和6000,将数据转发到/从端口5000和6000中选择的端口
部署
  kubectl port-forward deployment / mydeployment 5000 6000

  #在本地端口8888上侦听,在pod中转发到5000
  kubectl port-forward pod / mypod 8888:5000

  #在本地随机端口收听,转发到pod中的5000
  kubectl port-forward pod / mypod:5000

选项:
      --pod-running-timeout = 1m0s:等待至少一个的时间长度(如5s,2m或3h,大于零)
pod正在运行

用法:
  kubectl port-forward TYPE / NAME [LOCAL_PORT:] REMOTE_PORT [... [LOCAL_PORT_N:] REMOTE_PORT_N] [options]

使用“kubectl options”获取全局命令行选项列表(适用于所有命令)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

我们可以通过这个指令将 pod 里边的端口映射到主机上来,方法如下:

[root@master pod-basic]$kubectl port-forward nginx 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
1
2
3

将 pod 里边的 80 端口映射到主机的 8080 端口,那么现在去访问一下看看:

[root@master ~]$curl 127.0.0.1:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

发现已经可以了。但是刚刚那个映射的时候,可以看到映射输出在前台不会退出,而一旦退出之后,则这个映射又消失了,怎样才能恒久的映射呢,这个后边再说。

微信 支付宝
上次更新: 2024/06/13, 22:13:45
配置kubectl命令补全功能
k8s基本使用入门-了解ReplicationController

← 配置kubectl命令补全功能 k8s基本使用入门-了解ReplicationController→

最近更新
01
学习周刊-总第216期-2025年第25周
06-20
02
睡着的人不关灯
06-12
03
学习周刊-总第215期-2025年第24周
06-12
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式