添加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相关推荐

  1. Linux K8S(Kubernetes)常用命令

    Linux K8S(Kubernetes)常用命令集 一.K8S简介 二.常用命令 2.1 想查看kubectl命令的方法 2.2 常用的命令类 2.3 K8S常用命令 一.K8S简介 Kuberne ...

  2. git 常用命令(含删除文件)

    git 常用命令(含删除文件) Git常用操作命令收集: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库: ...

  3. k8s资源清单:常用字段说明及pod增删查示例

    查看参数的方法 kubectl explain pod #查看pod的字段 kubectl explain pod.apiVersion 必须存在的属性 额外参数项 pod示例 vim pod.yam ...

  4. config kubectl_kubectl常用命令归档及pod诊断工具安装

    kubectl常用命令归档: 1 - k8s运行的服务是 kubectl,一般这个服务要设置默认开机启动 [root@k8s-master ~]# systemctl enable kubelet.s ...

  5. Redis常用命令|查询|删除|模糊操作

    Redis中有很多操作命令,今天就给大家整理一下,或许不够全面,欢迎留言沟通. redis常用命令 作用 命令 描述 查看所有key keys * 模糊匹配key keys xxx* | keys * ...

  6. k8s通过命令批量删除pod

    k8s批量删除失败的pod 查看所有的pod kubectl get pod --all-namespaces 选择STATUS列,查看某namespace的非Running的记录,比如: kubec ...

  7. k8s pod分类、核心组件、网络模型、kubectl常用命令

    k8s的pod分类.核心组件.网络模型.kubectl常用命令 K8s基本概念 pod分类 核心组件 K8s的三种网络模型 kubectl常用操作 kubeconfig配置文件 kubectl管理命令 ...

  8. k8s查看pod的yaml文件_每天5分钟|轻松掌握开发工作中必会的k8s-yaml配置说明和常用命令...

    在 K8S 中,创建资源有两种方式: 方式一:使用kubectl 命令行,在输入kubectl命令的时候,填上对应的参数 优点:方便快捷,一行命令搞定 缺点:一行命令太多参数,可读性差,不利于维护 方 ...

  9. docker k8s 常用命令及常见问题解决大全

    文章目录    1 一.Docker常用命令总结    5 1.Docker容器常用操作    6 (1)镜像的查看与删除    6 (2)容器的启动与进入    6 (3)通过容器提交镜像    7 ...

最新文章

  1. Web Socket 性能对比——Spring Boot vs Tomcat vs Netty
  2. 第1章-导言-习题1.13-1.17
  3. 高频变压器_变压器图案
  4. python制作查询网页_peewee数据查询之分页返回——python学习笔记
  5. stm32 ISP串口下载
  6. pandas 常用函数整理
  7. 卷积神经网络的输出形状
  8. java biginteger string_String到BigInteger java
  9. cacti的安装与配置(一)安装
  10. AIDA64 硬件规格、系统信息查询工具附带序列号
  11. sd卡无法读取怎么办?内存卡数据恢复,4个好用方法
  12. banner图的开发
  13. 12306泄露信息查询工具 12306回应信息泄露
  14. matlab如何设置自变量,matlab中如何指定一个函数的自变量
  15. [C程序设计]输出所有的“水仙花数”。
  16. 阿古斯机器人_新卡评测 地精大战侏儒资料先睹为快
  17. 传导 耦合RF 发射功率,灵敏度 国标
  18. 【论文阅读】社交网络传播最大化问题-03
  19. vue 梯形百分比占比图
  20. 即时通讯软件,专注于企业信息安全可靠的企业IM

热门文章

  1. 【rotors】多旋翼无人机仿真(四)——参数补偿和PID控制
  2. python输出1到100之间的合数_python输出100以内的质数与合数实例代码
  3. Java程序员面试需要注意什么
  4. 全国青少年科技创新大赛全国青少年信息学奥林匹克系列比赛(大赛系列第12期)
  5. 对抗生成网络(GAN)简介及生成数字实战
  6. 数模学习(模糊数学篇)——模糊识别(python实现)
  7. TEX:文档的布局与组织
  8. 批量识别图片大致不相同图片_电脑图片太多,其中不少是重复的,有无什么软件可以识别相同图片!...
  9. Ruby on Rails 实践:优化rvm安装、下载速度
  10. asterisk简单实用