0
点赞
收藏
分享

微信扫一扫

k8s基本使用入门-使用Pod

两岁时就很帅 2021-09-24 阅读 154
日记本

1、创建一个 nginx 的 pod

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

[root@kube-node01 yaml]$ cat pod_nginx.yml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

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

现在来启动它:

[root@kube-node01 yaml]$ kubectl create -f pod_nginx.yml
pod "nginx" created

简单查看一下状态:

[root@kube-node01 yaml]$ kubectl get pod
NAME      READY     STATUS    RESTARTS   AGE
nginx     1/1       Running   0          25s

可以看到命名为 nginx 的 pod 起来了,1/1 表示只有一个
查看详细状态:

[root@kube-node01 yaml]$ kubectl get pods -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP            NODE
nginx     1/1       Running   0          1m        172.30.64.2   kube-node01

可以观察到 pod 的 ip(172.30.64.2),以及所被分配到的节点(kube-node01)

2、进入到 pod

进入到 pod 方式以下方法:

[root@kube-node01 yaml]$ 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

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

[root@kube-node01 yaml]$ 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的选项进行指定。

3、查看 pod 详细信息

Name:           nginx-hntgc
Namespace:      default
Node:           kube-node01/IP地址
Start Time:     Tue, 14 Sep 2021 16:01:44 +0800
Labels:         app=nginx
Annotations:    <none>
Status:         Running
IP:             172.30.64.2
Controlled By:  ReplicationController/nginx
Containers:
  nginx:
    Container ID:   docker://87fe5e6147db509f3655c7c61f751ff96232c399e121ace4c09b5aad42db2378
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:853b221d3341add7aaadf5f81dd088ea943ab9c918766e295321294b035f3f3e
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 14 Sep 2021 XX:XX:XX +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-sq2n9 (ro)
Conditions:
  Type           Status
  Initialized    True 
  Ready          True 
  PodScheduled   True 
Volumes:
  default-token-sq2n9:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-sq2n9
    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:
  Type    Reason                 Age   From                  Message
  ----    ------                 ----  ----                  -------
  Normal  Scheduled              19m   default-scheduler     Successfully assigned nginx-hntgc to kube-node01
  Normal  SuccessfulMountVolume  19m   kubelet, kube-node01  MountVolume.SetUp succeeded for volume "default-token-sq2n9"
  Normal  Pulling                19m   kubelet, kube-node01  pulling image "nginx"
  Normal  Pulled                 19m   kubelet, kube-node01  Successfully pulled image "nginx"
  Normal  Created                19m   kubelet, kube-node01  Created container
  Normal  Started                19m   kubelet, kube-node01  Started container

4、测试访问 pod 地址

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

[root@kube-node01 yaml]$ curl 172.30.64.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
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>

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

先看看介绍:

[root@kube-node01 yaml]$ 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”获取全局命令行选项列表(适用于所有命令)。

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

[root@kube-node01 yaml]$  kubectl port-forward nginx 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80

将 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>

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

举报

相关推荐

0 条评论