重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
小编给大家分享一下K8S基本使用方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
坚守“ 做人真诚 · 做事靠谱 · 口碑至上 · 高效敬业 ”的价值观,专业网站建设服务10余年为成都成都门帘小微创业公司专业提供成都企业网站建设营销网站建设商城网站建设手机网站建设小程序网站建设网站改版,从内容策划、视觉设计、底层架构、网页布局、功能开发迭代于一体的高端网站建设服务。
K8s集群的最小单位是pod,一个pod里面可以包含多的容器,通常以yaml文件去创建pod,也可以使用run命令直接创建
创建pod:命令格式: kubectl create –f [yaml文件] 使用RUN命令直接创建:命令格式:kubectl run –i –t [pod名称] –image=[镜像名称]
列1:通过ymal文件创建一个redis-master pod
redis-master-controller.yaml 文件内容: apiVersion: v1 kind: ReplicationController metadata: name: redis-master labels: name: redis-master spec: replicas: selector: name: redis-master template: metadata: labels: name: redis-master spec: containers: - name: master image: kubeguide/redis-master ports: - containerPort: 6379 kubectl create -f redis-master-controller.yaml
例2: 使用RUN命令直接创建
kubectl run -i -t busybox --image=busybox kubectl run -i -t busybox --image=busybox --replicas=5 --replicas 指定副本数 常用参数
命令格式: kubectl delete pod/po [pod名称]
此时虽然显示pod已经删除,但是你再次查看pod的时候会发现还是有一个名为busybox**的pod存在,这是因为k8s的安全机制,k8s保证了定义的pod副本数的恒定,加入一个pod副本数为5那么有5个pod提供服务,pod坏掉或者删除掉k8s的安全机制将检查副本数量如果pod数量少于5 那么k8s将会自动创建pod使之保持在数量为5个。
彻底删除:
第一种方式是重新编辑yaml文件 如果文件指定多个副本数将其改为0 第二种方式使用 kubectl delete –f m命令
POD 查看
总体查看
命令 kubectl get pods 进行查看
相对详细信息查看
kubectl get pod -o wide
更加详细的信息
命令格式: kubectl describe [po/deploy] [名称]
Pod是k8s集群的最小单元,一个pod里面可以包含多的容器,那么所有属于这个pod的容器都会运行在一个节点上面。Pod封装了一个或多个应用程序的容器(比如nginx等),存储资源,唯一的网络IP以及管理容器的一些选项 Pod标示的是一个部署单元,可以理解为Kubernetes中的应用程序的单个实例,它可能由单个容器组成,也可能由少量紧密耦合并共享资源的容器组成。如果多个容器在同一Pod下他们公用一个IP所以不能出现重复的端口号,比如在一个Pod下运行两个nginx就会有一个容器异常,一个Pod下的多个容器可以使用localhost来访问对方端口应为Pod是最小的单元如果在Pod中容器出现异常终止了是不会重启,在实际使用场景下基本不会直接使用Pod而是使用Deployment部署自己的应用
deployment 是什么
在早期版本使用Replication Controller对Pod副本数量进行管理,在新的版本中官方推荐使用Deployment来代替RC,Deployment相对RC有这些好处
特点:
Deployment拥有更加灵活强大的升级、回滚功能,并且支持滚动更新
使用Deployment升级Pod只需要定义Pod的最终状态,k8s会为你执行必要的操作(RC要自己定义如何操作)
进入到容器内部操作
K8s进入pod指令和 docker 进入容器指定类似
Docker进入容器指令为:
docker exec –it 容器ID/name sh/bash
K8s进入到pod中容器中指令:
kubectl exec –it pod-name sh/bash
拷贝一个文件到pod指定目录
命令:kubectl cp file/dir:某目录
pod 与 service的关系
前面写到创建了POD,但是有了POD依然不能提供服务,此时轮到了我们service上场了,专业一点讲叫服务发布。服务发布是创建了POD或者deployment 然后还需要创建service发布出去。 关联pod和service 是通过 labels 标签实现的。为关联的准确性可以添加多个标签
例:我们创建一个redis-master的POD 然后在创建一个redis-master 的服务并发布
发布pod
创建pod: vim redis-master-controller.yaml apiVersion: v1 kind: ReplicationController metadata: name: redis-master labels: name: redis-master spec: replicas: selector: name: redis-master template: metadata: labels: name: redis-master spec: containers: - name: master image: kubeguide/redis-master ports: - containerPort: 6379
发布Service
vim redis-master-service.yaml apiVersion: v1 kind: Service metadata: name: redis-master labels: name: redis-master spec: ports: - port: 6379 targetPort: 6379 selector: name: redis-master
服务的创建方式与pod相同: 使用 kubectl create –f [x-service.yaml] kubectl create -f redis-master-service.yaml
查看服务
命令 kubectl get svc –o wide 服务的CLUSTER-IP 是服务的 VIP
查看详细的描述信息:
Kubectl describe svc [service-name]
销毁服务
service的销毁和pod的销毁方法相同 命令: kubectl delete –f [x-service.yaml]
注意:创建完整的容器提供服务包含 POD(Deployment)和 Services,建议Services在Pod之前创建。
方法一 使用命令操作副本数量
例:创建一个redis-slave 应用容器 副本数量指定为2 然后通过命令进行动态扩容和缩容
vim redis-slave.yaml apiVersion: v1 kind: ReplicationController metadata: name: redis-slave labels: name: redis-slave spec: replicas: 2 selector: name: redis-slave template: metadata: labels: name: redis-slave spec: containers: - name: slave image: kubeguide/guestbook-redis-slave env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 6379 kubectl create -f redis-slave.yaml
上面的yaml文件是定义了2个pod副本,我们通过命令扩容到5个
使用scale命令 kubectl scale rc redis-slave --replicas=5
此时通过 kubectl get pod -o wide 命令去查看,你会发现有五个redis-slave pod了
缩容的方式一样 在命令里面指定 --replicas 的数量即可实现
命令 :kubectl edit rc/deployment [rc/deployment-name]
例:修改应用配置 我们上一步将replicas 数量设置为5 现在将他改为6 保存退出验证
kubectl edit rc redis-slave
重构命令:kubectl replace -f x.yaml
修改配置文件进行重构即可,这个是需要释放已存在的pod,然后创建新的pod的过程
查看全部的包括宿主机的
命令:kubectl get endpoints
只查看rc/deploy相关的端口
kubectl get ep [rc/deploy-name]
pod的状态
使用k8s创建pod的几种状态
Pending:Pod已经被系统接收,准备下载镜像。 Running:Pod已经分配到节点,并且所有容器已创建。至少有一个容器仍在运行、正在启动或重新启动。 Successed:Pod中的所有容器已成功终止,不会重新启动。 Failed:Pod中的所有容器已终止,并且至少有一个容器已经终止。也就是说,容器退出非零状态或被系统终止。 Unknown:由于某种原因,无法获得Pod状态,通常是由于与Pod所在主机通信时出现错误。
查看所有namespace
命令:kubectl get namespace/ns(ns 为简写)
注:我们的在未指定namespace创建Pod 会默认使用default 这个命名空间
给pod指定namespace
在给pod指定之前我们k8s集群默认是只有default 这个命名空间,所以我们如果使用其他命名空间需要先创建命名空间
例: 创建一个名为mynamespace的命名空间
cat mynamespace.yaml apiVersion: v1 kind: Namespace metadata: name: mynamespace 创建命令与创建pod和service相同
yaml 指定namespace示子:
cat pod.yaml apiVersion: v1 kind: Pod metadata: name: busybox1 namespace: mynamespace spec: containers: - image: gcr.io/google_containers/busybox command: - sleep - "3600" name: busybox1 kubectl create -f pod.yaml
创建完pod 此时你使用 kubectl get pod -o wide 或者 kubectl get pod 查看是看不到的,因为这些pod都是在默认空间中的
所以想要查看 mynamespace 空间的pod 需要在查看命令指定namespace空间
命令:
kubectl get pods –n [namespace名称] 或者 kubectl get pods -o wide –n [namespace名称]
使用run 命令创建pod指定namespace
kubectl run -i -t busybox --image=busybox --namespace=mynamespace
Kubectl命令行管理对象
创建资源小技巧
当资源可以使用create 创建时,可以使用 -o yaml 和 --dry-run 查看yaml文件如何写
-o yaml 以yaml格式输出
--dry-run 测试创建,不会真的创建资源
例:
kubectl create serviceaccount mycount -o yaml --dry-run
另外一种方法导出摸个pod/deploy yaml文件 用于模板文件可以修改为其他的pod/deploy的yaml
kubectl get pods x-pod -o yaml --export
查看 node标签
kubectl get nodes --show-labels
给node打标签
kubectl label nodes node1 zone=foo zone 标签key foo 标签值
node设置污点
kubectl taint node node2 node-type=dev:NoExecute
node去污
kubectl taint node node2 node-type:NoExecute-
以上是“K8S基本使用方法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!