k8s添加pod,k8常用命令,k8s删除pod
一
添加pod测试
创建deployment
kubectl create deployment nginx(pod名称)–image=nginx
创建后查看:kubectl get deployment
放开端口
kubectl expose deployment nginx --por=80 type=NodePort
查看服务端口:32079
可以通过集群任一ip地址(master或者node节点)
ip地址:32079访问部署的nginx
deployment扩容pod
kubectl create部署web项目
该方法比较麻烦,需要手动更新镜像等,查不到更新历史记录
准备war包,和Dockerfile放在同一个目录中
vim Dockerfile
创建镜像
修改镜像tag:docker tag
登录远程镜像仓库:docker login
推送至远程仓库:docker push
k8s运行镜像
kubectl create deployment jpresstest(pod名称)–image=jpress:v1
或者创建yaml文件配置
放开端口32080
kubectl expose deployment jpresstest --por=8080 type=NodePort
或者创建yaml文件配置
kubectl get svc
访问报错
查看pod状态有问题kubectl get pod
进入pod(1个pod只有1个docker容器)
kubectl exec -it jpresstest-9c7c97fbc-lb67 – /bin/bash
进入pod(1个pod有多个docker容器)
kubectl exec -it jpresstest-9c7c97fbc-lb67 --container main-app – /bin/bash
容器中没有对应的文件
更新镜像文件:
先运行镜像docker run -d -p jpress:v1
进入运行镜像创建的容器:docker exec -it 容器id /bin/bash
调整好容器内部的内容
退出该容器内部
提交该容器:docker commit 容器id jpress:v2
提交后修改该容器tag并提交至阿里云仓库,版本记录为v2
滚动更新k8s集群的pod版本:kubectl set image deploy/<pod名称> <容器名称>=<镜像名称:版本号> --record
更新过程:
最终结果:
查看k8版本
kubectl api-versions
v1:Kubernetes API的稳定版本,包含很多核心对象:pod、service等
apps/v1:在kubernetes1.9版本中,引入apps/v1,deployment等资源从extensions/v1beta1, apps/v1beta1 和 apps/v1beta2迁入apps/v1,原来的v1beta1等被废弃。
apps/v1代表:包含一些通用的应用层的api组合,如:Deployments, RollingUpdates, and ReplicaSets
nfs共享存储
pod的生命周期短暂,会被频繁的创建和销毁。当pod被销毁时,pod内的文件系统也会被销毁,所以为了解决这个问题,k8s提供了Volume。
Volume的生命周期独立于pod容器。当pod不在存在时,k8s会销毁临时卷。但对于持久卷,k8s在pod重启期间不会进行销毁
持久卷的核心是一个目录,任何pod的容器都可以访问该目录中的数据。
nfs作用:
多节点共享存储
独立于pod的文件服务器
文件服务器搭建
nfs搭建(分服务端和客户端):
三台主机:master node1 node2
搭建在node2主机。
centos7只安装nfs-utils
yum -y install nfs-utils rpcbind
随意找个路径放置nfs存储路径
mkdir /home/nfs/
编辑/etc/exports文件添加需要共享目录,每个目录的设置独占一行,编写
/usr/local/nfs 192.168.0.0/16(rw,sync)
同192.168.248.0/24一个网络号的主机可以挂载NFS服务器上的/home/nfs/目录到自己的文件系统中
rw表示可读写;sync表示同步写,fsid=0表示将/data找个目录包装成根目录
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
设置共享目录生效
exportfs -r
启动nfs
systemctl start rpcbind.service
systemctl enable rpcbind.servicesystemctl start nfs.service
systemctl enable nfs.service
确认NFS服务器启动成功:
rpcinfo -p
检查 NFS 服务器是否挂载我们想共享的目录 usr/local/nfs:
exportfs
检查nfs服务是否能正常访问
showmount -e node2ip地址
-e:显示NFS服务器上所有的共享目录
启动客户端rpcbind.service nfs
node2节点挂在目录报错(第一次成功没有报错,之后再执行就报错):
挂载:
mount -t nfs 192.168.126.8:/usr/local/nfs /root/nfs
卸载
umount /root/nfs
开机自动挂载
写入/etc/fstab
mount -a
df -h 执行(node2节点)是已经挂载成功了
测试挂载:
客户端添加u.txt 文件夹,可以再服务端(node1)节点看到
如果添加的文件没有共享,需要设置共享目录权限。
yaml部署web项目
创建yaml文件
kind: Deployment
apiVersion: apps/v1
metadata:labels:app: wework-tomcat-app1-deployment-labelname: wework-tomcat-app1-deployment --Deployment名称(由 .metadata.name 字段标明)namespace: wework --所属namespace
spec:replicas: 3 --创建三个(由 replicas 字段标明)Pod 副本selector:matchLabels:app: wework-tomcat-app1-selector --selector 字段定义 Deployment 如何查找要管理的 Pods。 在这里,你选择在 Pod 模板中定义的标签(app: wework-tomcat-app1-selector), 在 API 版本 apps/v1 中,Deployment 标签选择算符在创建后是不可变的。template:metadata:labels:app: wework-tomcat-app1-selector --Pod 被使用 labels 字段打上 app: nginx 标签。spec:containers:- name: wework-tomcat-app1-containerimage: jpress:v3ports: ---容器内端口- containerPort: 8080protocol: TCPname: httpvolumeMounts: ----容器内挂载点- name: wework-images --必须有名字mountPath: /usr/local/tomcatreadOnly: falsevolumes:- name: wework-images ---跟上边名称一致nfs: ---宿主机挂载点server: 192.168.126.8path: /usr/local/nfs
---
kind: Service
apiVersion: v1
metadata:labels:app: wework-tomcat-app1-service-labelname: wework-tomcat-app1-servicenamespace: wework
spec:type: NodePortports:- name: httpport: 8080protocol: TCPtargetPort: 8080nodePort: 30095selector:app: wework-app1-selector
编写完成后保存退出
应用该文件:kubectl apply -f wework.yaml
也可以查到对应的pod 和deployment
会提示没有对应的catalina.sh
不知道为什么,pod刚运行起来没有在对应的共享目录中共享数据。
解决方法:将tomcat安装包解压后复制进共享目录,
pod就可以正常运行了(以下是将副本数量设置为1了,好处理)
进入pod副本:kubectl exec -it podID /bin/bash
随意创建文件,可以在nfs服务端的共享目录看到
创建一个test.txt 文件测试,即使将pod删除后重新运行也依旧存在test.txt
实现镜像同步
注:
以下镜像名可以修改,如果修改为从阿里云pull的镜像(registry.cn-hangzhou.aliyuncs.com/mynamespacew/jpress:v3)
可以修改vi /etc/docker/daemon.json //如果没有此文件,请创建
添加代码
“insecure-registries”:[“htts://registry.cn-hangzhou.aliyuncs.com/mynamespacew”]
pod状态为CrashLoopBackoff、ContainerCreating异常处理
新建pod,查看pod状态异常
查看pod日志:kubectl logs pod实例 -n 命名空间
kubectl describe pod pod实例名称 -n 命名空间
进入pod和容器提示
pod状态为Imagepullbackoff异常处理
查看pod节点:kubectl describe pod jpresstest-9c7c97fbc-vpwnt
报错如下:back-off pulling image ‘jpress:v1’
经查,node节点没有该镜像
该pod所属node1节点,在该节点下pull该镜像
master节点重新获取pod正常
另外一个同理。
pod节点状态为terminating 状态异常处理步骤
查看节点状态是否正常:kubectl get nodes
查看有问题的节点:kubectl get nodes node2
kubelet stopped posting node status .说明是kubelet的问题。
确认node2节点的kubelet状态,状态正常
查看运行日志:Journalctl -u kubelet
重启kubelet后正常:systemctl restart kubelet
删除pod
K8S 不能直接删除Pod,直接删除Pod,会被Deployment重启
先删除deployment.
1.查看deployment
查看pod
2删除deployment:kubectl delete deployment nginx
查看deployment
3删除服务
kubectl delete src nginx
kubectl get src
4
状态为terminating的无法删除
可以强制删除:kubectl delete pod pod-name -n ns-name --force --grace-period=0
再查看就没有对应的pod了
注:
如果强制删除还不行,设置finalizers为空
(如果一个容器已经在运行,这时需要对一些容器属性进行修改,又不想删除容器,或不方便通过replace的方式进行更新。kubernetes还提供了一种在容器运行时,直接对容器进行修改的方式,就是patch命令。)
kubectl patch pod xxx -n xxx -p ‘{“metadata”:{“finalizers”:null}}’
常用命令
1
查看节点的标签
kubectl describe ns test | grep “Labels” -A 10
2
查看服务器节点
kubectl get nodes
3
节点打标签
kubectl label nodes <节点名称> labelName=<标签名称>
例:kubectl label nodes node2 labelName=test
kubectl get node --show-labels
4
删除节点标签
kubectl label node node2 labelName-
5
查看所有pod节点
kubectl get pod -A
6
查看对应节点的所属IP地址
kubectl get pod -o wide -n kube-system
查看所有节点的所属IP地址
kubectl get pod -o wide -A
7
根据yaml文件创建pod
kubectl apply -f yaml文件
根据yaml文件删除pod
kubectl delete -f yaml文件
8
创建命名空间test:
kubectl create ns test
为命名空间test设置标签ev=test:
kubectl label ns test env=test
修改命名空间标签
kubectl label --overwrite ns test env=testtest
删除命名空间标签
kubectl label ns test env-
9
扩容/缩容
kubectl scale deploy/<pod名称> --replicas=<5>
10
暂停deployment,被 pause 命令暂停的资源不会被控制器协调使用
kubectl rollout pause deployment deploy名称 -n 命名空间
启动deployment
kubectl rollout resume deployment deploy名称 -n 命名空间
11
进入pod和容器
kubectl exec -it 容器id -n 命名空间名称
12
查看历史更新:kubectl roullout history deploy/deployment -n 命名空间
13
回退pod到上一个版本:kubectl roullout undo deploy/wework-deployment -n wework
回退pod到上一个版本也会记录在更新历史中。
error converting YAML to JSON: yaml: line 3: mapping values are not allowed in this context
这个问题是因为yaml文件不支持tab制表符
yaml语法不支持制表符,用空格代替就行。
k8s添加pod,k8常用命令,k8s删除pod相关推荐
- Linux K8S(Kubernetes)常用命令
Linux K8S(Kubernetes)常用命令集 一.K8S简介 二.常用命令 2.1 想查看kubectl命令的方法 2.2 常用的命令类 2.3 K8S常用命令 一.K8S简介 Kuberne ...
- git 常用命令(含删除文件)
git 常用命令(含删除文件) Git常用操作命令收集: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库: ...
- k8s资源清单:常用字段说明及pod增删查示例
查看参数的方法 kubectl explain pod #查看pod的字段 kubectl explain pod.apiVersion 必须存在的属性 额外参数项 pod示例 vim pod.yam ...
- config kubectl_kubectl常用命令归档及pod诊断工具安装
kubectl常用命令归档: 1 - k8s运行的服务是 kubectl,一般这个服务要设置默认开机启动 [root@k8s-master ~]# systemctl enable kubelet.s ...
- Redis常用命令|查询|删除|模糊操作
Redis中有很多操作命令,今天就给大家整理一下,或许不够全面,欢迎留言沟通. redis常用命令 作用 命令 描述 查看所有key keys * 模糊匹配key keys xxx* | keys * ...
- k8s通过命令批量删除pod
k8s批量删除失败的pod 查看所有的pod kubectl get pod --all-namespaces 选择STATUS列,查看某namespace的非Running的记录,比如: kubec ...
- k8s pod分类、核心组件、网络模型、kubectl常用命令
k8s的pod分类.核心组件.网络模型.kubectl常用命令 K8s基本概念 pod分类 核心组件 K8s的三种网络模型 kubectl常用操作 kubeconfig配置文件 kubectl管理命令 ...
- k8s查看pod的yaml文件_每天5分钟|轻松掌握开发工作中必会的k8s-yaml配置说明和常用命令...
在 K8S 中,创建资源有两种方式: 方式一:使用kubectl 命令行,在输入kubectl命令的时候,填上对应的参数 优点:方便快捷,一行命令搞定 缺点:一行命令太多参数,可读性差,不利于维护 方 ...
- docker k8s 常用命令及常见问题解决大全
文章目录 1 一.Docker常用命令总结 5 1.Docker容器常用操作 6 (1)镜像的查看与删除 6 (2)容器的启动与进入 6 (3)通过容器提交镜像 7 ...
最新文章
- Web Socket 性能对比——Spring Boot vs Tomcat vs Netty
- 第1章-导言-习题1.13-1.17
- 高频变压器_变压器图案
- python制作查询网页_peewee数据查询之分页返回——python学习笔记
- stm32 ISP串口下载
- pandas 常用函数整理
- 卷积神经网络的输出形状
- java biginteger string_String到BigInteger java
- cacti的安装与配置(一)安装
- AIDA64 硬件规格、系统信息查询工具附带序列号
- sd卡无法读取怎么办?内存卡数据恢复,4个好用方法
- banner图的开发
- 12306泄露信息查询工具 12306回应信息泄露
- matlab如何设置自变量,matlab中如何指定一个函数的自变量
- [C程序设计]输出所有的“水仙花数”。
- 阿古斯机器人_新卡评测 地精大战侏儒资料先睹为快
- 传导 耦合RF 发射功率,灵敏度 国标
- 【论文阅读】社交网络传播最大化问题-03
- vue 梯形百分比占比图
- 即时通讯软件,专注于企业信息安全可靠的企业IM
热门文章
- 【rotors】多旋翼无人机仿真(四)——参数补偿和PID控制
- python输出1到100之间的合数_python输出100以内的质数与合数实例代码
- Java程序员面试需要注意什么
- 全国青少年科技创新大赛全国青少年信息学奥林匹克系列比赛(大赛系列第12期)
- 对抗生成网络(GAN)简介及生成数字实战
- 数模学习(模糊数学篇)——模糊识别(python实现)
- TEX:文档的布局与组织
- 批量识别图片大致不相同图片_电脑图片太多,其中不少是重复的,有无什么软件可以识别相同图片!...
- Ruby on Rails 实践:优化rvm安装、下载速度
- asterisk简单实用