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
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
2
简单查看一下状态:
[root@master pod-basic]$kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 25s
1
2
3
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
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
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
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
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
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
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
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
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