kubernetes基础配置(入门操作)

资源管理

一、资源管理方式

1.命令式对象管理:直接使用命令去操作kubernetes资源

[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

2.命令式对象配置:通过命令配置和配置文件去操作kubernetes资源

[root@master ~]# kubectl create -f nginx-pod.yaml

3.声明式对象配置:通过apply命令和配置文件去操作kubernetes资源

[root@master ~]# kubectl apply -f nginx-pod.yaml

pod/nginx-pod created

二、命令式对象管理

1.Kubectl命令:

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

2.资源类型

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资源

1.创建一个nginxpod.yaml,内容如下:

[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

~

2.执行create命令,创建资源

3.执行get命令,查看资源

[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

4.执行delete命令,删除资源

[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

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资源的具体操作

查看

1.查看所有的ns

[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

2.查看指定的ns

[root@master ~]# kubectl get ns dev

NAME   STATUS   AGE

dev    Active   9m36s

3.指定输出格式

命令:kubectl get ns ns名称 -o 格式参数(kubernetes支持的格式参数常见的有wide、json、yaml)

4.查看ns详情

[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中的每个组件做的资源限制

5.创建

[root@master ~]# kubectl create ns ywj

namespace/ywj created

6.删除

[root@master ~]# kubectl delete ns ywj

namespace "ywj" deleted

7.配置方式

二、Pod

Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于pod中;pod可以认为是容器的封装,一个pod中可以存在一个或者多个容器

Kubernetes在集群启动之后,集群中的各个组件都是以pod方式运行的

1.创建并运行

#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

2.查看pod信息

(1)查看pod基本信息

[root@master ~]# kubectl get pods -n dev

NAME                    READY   STATUS    RESTARTS   AGE

nginxpod                1/1     Running   0          37m

(2)查看pod详细信息

3.访问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>

4.删除指定pod

删除指定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.

5.配置操作

创建一个pod-nginx.yaml

然后就可以执行对应的创建和删除命令

三、Label

Label是kubernetes系统中的一个重要概念,作用就是在资源上添加标识,用来区分和选择

Label的特点:

一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等

一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去

Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除

1.命令方式

#为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

2.配置方式

四、Deployment

在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。

在kubernetes中Pod控制器的种类有很多,deployment是其中一种

1.命令操作

#命令格式: 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

2.配置操作

创建一个deploy-nginx.yanl文件

五、Service

虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:

(1)Pod IP 会随着Pod的重建产生变化

(2)Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问

这样对于访问这个服务带来了难度。因此,kubernetes设计了Service来解决这个问题。

Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。

1.创建集群内部可访问的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

2.创建集群外部可访问的Service

[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

在电脑主机上通过浏览器访问下面地址

3.删除Service

[root@master ~]# kubectl delete svc svc-nginx1 -n dev

service "svc-nginx1" deleted

4.配置方式

创建一个svc-nginx.yaml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值