[root@master ~]# kubectl run nginx-pod --image=nginx --port=80
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx-pod created
[root@master ~]# kubectl create -f nginx-pod.yaml
[root@master ~]# kubectl apply -f nginx-pod.yaml
pod/nginx-pod created
Kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署,kubectl命令的语法如下:
# kubectl [command] [type] [name] [flags]
参数解析:
Comand:指定要对资源执行的操作,例如create 、get、delete
Type:指定资源类型,比如deployment、pod、service
Name:指定资源的名称,大小写敏感
Flags:制定额外的可选参数
#查看所有Pod
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-6867cdf567-qmxt5 1/1 Running 0 25h
nginx-pod 1/1 Running 0 40m
nginx-pod-77f84df46-fr452 1/1 Running 0 46m
#查看nginx-pod
[root@master ~]# kubectl get pod nginx-pod
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 40m
#查看nginx-pod,以yaml格式展示结果
[root@master ~]# kubectl get pod nginx-pod -o yaml
Kubernetes中所有的内容都抽象为资源,可通过下面命令进行查看
[root@master ~]# kubectl api-resources
经常使用的资源有如下这些:
操作
Kubernetes允许对资源进行多种操作,可通过-help查看详细的操作命令
[root@master ~]# kubectl --help
经常使用的操作有下面这些:
练习:
下面通过一个namespace/pod的创建和删除进行演示
#创建一个namespace
[root@master ~]# kubectl create namespace dev
namespace/dev created
#获取namespace
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 26h
dev Active 17s
kube-node-lease Active 26h
kube-public Active 26h
kube-system Active 26h
mem-example Active 74m
#在此namespace下创建并运行一个nginx的pod
[root@master ~]# kubectl run pod --image=nginx -n dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created
#查看新建的pod
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod-864f9875b9-fth8f 0/1 ContainerCreating 0 22s
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod-864f9875b9-fth8f 1/1 Running 0 36s
#删除指定的pod
[root@master ~]# kubectl delete pod pod-864f9875b9-fth8f
pod “pod-864f9875b9-fth8f” deleted
#删除指定的namespace
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted
命令式对象配置就是使用命令配合配置文件一起操作kubernetes资源
[root@master ~]# vi nginxpod.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: dev
spec:
containers:
- name: nginx-containers
image: nginx:latest
~
[root@master ~]# kubectl get -f nginxpod.yaml
NAME STATUS AGE
namespace/dev Active 11h
NAME READY STATUS RESTARTS AGE
pod/nginxpod 1/1 Running 0 11h
[root@master ~]# kubectl delete -f nginxpod.yaml
namespace "dev" deleted
pod "nginxpod" deleted
[root@master ~]# kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
#当第一次执行该命令,发现成功创建资源
[root@master ~]# kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged
#再次执行该命令,说资源没有变动
注:使用apply操作资源
若资源不存在,就会kubectl create 创建
若资源不存在,就会kubectl patch 更新
Namespace是kubernetes系统中的重要资源,作用是实现多套环境的资源隔离或者多租户的资源隔离
Kubernetes在集群启动之后,默认创建几个namespace
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 38h #所有未指定namespace的对象都会分配在该命名间
dev Active 8m31s
kube-node-lease Active 38h #集群节点之间的心跳维护
kube-public Active 38h #此命名空间下的资源可以被所有人访问(未认证用户)
kube-system Active 38h #所有由kubernetes系统创建的资源都处于该命名空间
mem-example Active 13h
Namespace资源的具体操作
查看
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 38h
dev Active 8m51s
kube-node-lease Active 38h
kube-public Active 38h
kube-system Active 38h
mem-example Active 13h
[root@master ~]# kubectl get ns dev
NAME STATUS AGE
dev Active 9m36s
命令:kubectl get ns ns名称 -o 格式参数(kubernetes支持的格式参数常见的有wide、json、yaml)
[root@master ~]# kubectl describe ns dev
Name: dev
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"dev"}}
Status: Active
No resource quota.
resource quota.:针对namespace做的资源限制
No LimitRange resource.
LimitRange :针对namespace中的每个组件做的资源限制
[root@master ~]# kubectl create ns ywj
namespace/ywj created
[root@master ~]# kubectl delete ns ywj
namespace "ywj" deleted
Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于pod中;pod可以认为是容器的封装,一个pod中可以存在一个或者多个容器
Kubernetes在集群启动之后,集群中的各个组件都是以pod方式运行的
#kubernetes没有提供单独运行pod的命令,都是通过pod控制器来实现的
#命令格式:kubectl run (pod控制器名称) [参数]
#-image 指定pod的镜像
#-port 指定端口
#-namespace 指定namespace
[root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --namespace dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created
(1)查看pod基本信息
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nginxpod 1/1 Running 0 37m
(2)查看pod详细信息
#获取pod的ip
[root@master ~]# kubectl get pods -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginxpod 1/1 Running 0 38m 10.244.166.134 node1 <none> <none>
#访问pod
[root@master ~]# curl http://10.244.166.134:80
<!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>
删除指定pod
[root@master ~]# kubectl delete pod nginxpod -n dev
pod "nginxpod" deleted
#虽然显示pod删除成功,但又产生了一个
[root@master ~]# kubectl get pods -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dd6b5d745-vkcjw 1/1 Running 0 9s 10.244.166.136 node1 <none> <none>
#这是因为当前pod是由pod控制器创建的,控制台会监视pod状况,一旦发现pod死亡,就会立即重建
#若想删除pod,必须删除pod控制器
#查询当前namespace下的pod控制器
[root@master ~]# kubectl get deploy -n dev
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 4m32s
#删除pod控制器
[root@master ~]# kubectl delete deploy nginx -n dev
deployment.apps "nginx" deleted
#再次查询pod,发现被删除了
[root@master ~]# kubectl get pods -n dev
No resources found in dev namespace.
创建一个pod-nginx.yaml
然后就可以执行对应的创建和删除命令
Label是kubernetes系统中的一个重要概念,作用就是在资源上添加标识,用来区分和选择
Label的特点:
一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等
一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去
Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除
#为pod资源打标签
[root@master ~]# kubectl label pod nginx version=1.0 -n dev
pod/nginx labeled
#为pod资源更新标签
[root@master ~]# kubectl label pod nginx version=2.0 -n dev --overwrite
pod/nginx labeled
#查看标签
[root@master ~]# kubectl get pod nginx -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 16m version=2.0
#筛选标签
[root@master ~]# kubectl get pod -n dev -l version=2.0 --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 18m version=2.0
[root@master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels
No resources found in dev namespace.
#删除标签
[root@master ~]# kubectl label pod nginx version- -n dev
pod/nginx labeled
在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。
在kubernetes中Pod控制器的种类有很多,deployment是其中一种
#命令格式: kubectl create deployment 名称 [参数]
#-image 指定pod的镜像
#-port 指定端口
#-replicas 指定创建pod数量
#-namespace 指定namespace
[root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3 -n dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created
#查看创建的pod
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 47m
nginx-dd6b5d745-69hj9 1/1 Running 0 3m37s
nginx-dd6b5d745-r5gb9 1/1 Running 0 3m37s
nginx-dd6b5d745-z5mcr 1/1 Running 0 57s
#查看deployment的信息
[root@master ~]# kubectl get deploy -n dev
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 3/3 3 3 2m50s
注:#UP-TO-DATE:成功升级的副本数量
#AVAILABLE:可用副本的数量
[root@master ~]# kubectl get deploy -n dev -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx 3/3 3 3 5m17s nginx nginx:latest run=nginx
查看deployment的详细信息
删除
[root@master ~]# kubectl delete deploy nginx -n dev
deployment.apps "nginx" deleted
创建一个deploy-nginx.yanl文件
虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
(1)Pod IP 会随着Pod的重建产生变化
(2)Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问
这样对于访问这个服务带来了难度。因此,kubernetes设计了Service来解决这个问题。
Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。
#暴露Service
[root@master ~]# kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
service/svc-nginx1 exposed
#查看Service
[root@master ~]# kubectl get svc svc-nginx1 -n dev -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
svc-nginx1 ClusterIP 10.100.104.101 <none> 80/TCP 31s run=nginx
上面产生一个Cluster-IP,这就是Service的IP,在Service的生命周期中,这个地址不会变
可以通过这个IP访问Service对应的pod
[root@master ~]# kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80
service/svc-nginx2 exposed
[root@master ~]# kubectl get svc svc-nginx1 -n dev -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
svc-nginx2 NodePort 10.100.94.0 <none> 80/31928/TCP 9s run=nginx
在电脑主机上通过浏览器访问下面地址
[root@master ~]# kubectl delete svc svc-nginx1 -n dev
service "svc-nginx1" deleted
创建一个svc-nginx.yaml
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/do-docker-k8s/32609.html