首页 > 其他分享 >Kubernetes(k8s) 咻咻咻

Kubernetes(k8s) 咻咻咻

时间:2023-03-21 18:03:45浏览次数:43  
标签:kubectl 咻咻咻 Kubernetes yaml 容器 nginx -- pod k8s


# 1. k8s集群架构组件

# master节点

* apiservice
集群统一入口,以restful方式,交给etcd存储
* scheduler
节点调度,选择node节点进行部署
* controller-manager
处理集群中常规的后台任务,一个资源(部署任务)对应一个控制器
* etcd
存储系统,用于保存集群相关的数据


# worker节点

* kubelet
master派到node节点代表(worker中master的客户端节点),管理本机容器
* kube-proxy
提供网络代理,负载均衡等操作
# 2. k8s的核心概念

# pod

* 最小的部署单元
* 一组容器的集合
* 内部容器之间共享网络
* 生命周期是短暂的


# controller (用来控制pod)

* 确保预期的pod副本数量
* 无状态应用部署
* 有状态应用部署
* 确保所有的node运行同一个pod
* 支持一次性任务和定时任务

# service (用来对外提供访问pod的能力)

* 定义一组pod的访问规则
# 3. 环境搭建

3.1. kubeadmin方式搭建 (简便)

3.2. 二进制方式搭建
# 4. kube命令行工具 kubectl


4.1. 语法
kubectl [command] [type] [name] [flag]
例如:kubectl get pods
kubectl get nodes
# 5. 资源编排yaml


5.1. yaml文件组成部分
控制器
被控制对象

5.2. 字段说明
apiVersion api版本
kind 资源类型
metadata pod元数据
spec pod规格
replicas 副本数量
selector 标签选择器
template pod模板
containers 容器配置

5.3. yaml文件生成
5.3.1. create命令生成
kubectl create deployment web --image=nginx -o yaml --dry-run > test.yaml

5.3.2. get命令生成 (新版本没有--export命令,直接去掉即可)
kubectl get deploy nginx -o yaml --export > test/yaml
# 6. pod

6.1. 概念
k8s中可以创建和管理的最小单元
pod由一个或多个容器组成
pod中容器是共享网络

6.2. pod存在的意义
1. 一个docker容器只能对应一个单进程应用
2. pod是多进程设计,一个pod可以有多个容器,同样对应多个应用程序
3. pod为了亲密行存在,也就是多个容器之间的网络交互

6.3. pod实现机制
共享网络、共享存储

6.4. 镜像拉去策略
imagePullPolicy:
ifNotPresent: 默认值,镜像在宿主机不存在的时候才拉取
always: 每次创建pod都会重新拉取一次经此昂
never: 永远不会主动拉取这个镜像 (需要手动)

6.5. pod资源限制
resources:
requests:
memory: "64Mi"
cpu:"250m"
limits:
memory: "128Mi"
cpu:"500m"

6.6. pod重启策略
restartPolicy:
always:默认,当容器退出后总是重启容器
onFailure:当容器异常退出(状态码非0),才重启容器
never:当容器终止退出,从不重启容器,适用一次性任务

6.7. pod健康检查
1. 存活检查 (livenessProbe)
如果检查失败,将杀死容器进程,根据pod的重启策略进行下一步操作
2. 就绪检查 (readnessprobe)
如果检查失败,k8s会将pod从service endpoint中剔除

6.8. pod健康检查方式
1. httpGet
发送http请求,返回200-400即为成功
2. exec
执行shell命令,返回状态码为0即成功
3. tcpsocket
发起tcpsocket成功建立连接

6.9. pod调度策略
6.10. 影响pod调度的因素
1. pod的yaml文件中的资源设置
2. nodeSlector节点选择器会影响具体分配到哪个节点中去 (节点创建标签方式:kubectl label node env_role:prod)
3. nodeAffinity节点亲和性 (硬亲和性、软亲和性)
硬亲和性:条件必须满足,不满足等待ing
软亲和性:尝试满足,不保证
4. taint污点和污点选择器 (针对于节点设置,而不是pod属性)
查看节点污点情况
kubectl describe node k8smaster | grep Taint
污点属性值
NoSchedule: 一定不会被调用
preferNoSchdule: 尽量不被调度
NoExecute: 不会调度,且还会驱逐node已有Pod
为节点添加污点
kubectl taint node [node] key=value:污点值
为节点删除污点
kubectl taint node [node] key=value:污点值-
污点容忍:就是通过添加pod属性值,对设置过污点的机器,使得可能被调度
# 7. controller

7.1. 什么是controller
在集群中管理和运行容器的对象

7.2. pod和controller的关系
注:相当于master和slave的关系,一个负责管理,一个负责干活
pod是通过controller实现应用的运维 (比如:弹性伸缩/滚动升级)
通过label标签建立关系

7.3. deployment应用场景
部署无状态应用
管理pod和replicaset
部署、滚动升级等

7.4. deployment部署应用
7.4.1. 创建nginx.yaml
kubectl create deployment web --image=nginx --dry-run -o yaml > nginx.yaml
7.4.2. 根据yaml创建pod
kubectl apply -f nginx.yaml
7.4.3. 查看创建的pod
kubectl get pods
7.4.4. 对外发布
kubectl expose deployment nginx --port=80 --type=NodePort -target-port=80 --name=nginx-publish -o yaml > nginx-publish.yaml
kubectl apply -f nginx-publish.yaml
7.4.5. 查看部署信息
kubectl get pods,service

7.5. 应用的升级回滚和弹性伸缩 (以下均以无状态应用nginx为例演示)
7.5.1. 应用升级
添加nginx.yaml中nginx:1.14版本号之后
kubectl apply -f nginx.yaml
kubectl get pods
kubectl set image deployment nginx nginx=nginx:1.15
kubectl get pods
7.5.2. 查看应用升级状态
kubectl rollout status deployment nginx
7.5.3. 查看历史升级版本
kubectl rollout history deployment nginx
7.5.4. 回滚上一版本
kubectl rollout undo deployment nginx
7.5.5. 回滚到指定版本
kubectl rollout undo deplyment nginx --to-revision=2

7.5.6. 弹性伸缩
kubectl scale deployment nginx --replicas=10
7.5.7. 查看常见的弹性副本
kubectl get pods
# 8. service

# 8.1. 定义
定义一组pod的访问规则

#

标签:kubectl,咻咻咻,Kubernetes,yaml,容器,nginx,--,pod,k8s
From: https://blog.51cto.com/u_16021118/6140746

相关文章

  • flink 咻咻咻
    #flink简介apache旗下开源项目,logo是松鼠flink是一个分布式处理引擎,用于对无界和有界数据流进行状态计算的框架高吞吐,低延迟流批一体化:流处理(无界流)、批处理(有界流)#fl......
  • kubernetes ingress金丝雀发布/灰度发布
    1.金丝雀发布介绍灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/Btesting,即让一部分用户继续用产品特性A,一部分用户开始用产品特......
  • k8s系统初始化
    1)主机域名解析:打开hosts文件:vim/etc/hosts在文件中添加:192.168.135.133192.168.135.141192.168.135.1422)设置时间同步:systemctlstartchronydsystemctlenable......
  • kubernetes ingress 蓝绿发布
    1.蓝绿发布介绍蓝绿发布就是现网运行的业务在系统1,计划升级的版本部署了系统2。新版本的系统2部署出来以后将进行充分的测试、验证。通过之后,将业务切换到系统2,即完成了......
  • kubernetes 集群环境搭建 (kubeadm方式)
    1、前置知识点目前生产部署Kubernetes集群主要有两种方式:(1)kubeadmKubeadm是一个K8s部署工具,提供kubeadminit和kubeadmjoin,用于快速部署Kubernetes集群。官方地......
  • ES6 咻咻咻
    #1.let和constlet:修饰局部变量const:修饰常量let不存在变量提升,var会变量提升#2.解构赋值(array/object)2.1.array解构基本:let[a,b,c]=[1,2,3];//a=1//b......
  • react 咻咻咻
    #react必知必会1.函数式组件(简单无状态场景)/class类式组件(复杂有状态场景)2.react思想:状态驱动UI3.组件实例三大核心:refs/props/state4.class=function+hoo......
  • dnd 咻咻咻
    #1.钩子函数APIuseDrag拖拽useDrop放置useDragLayer拖拽层#Drag拖拽import{useDrag}from'react-dnd'functionDrag(){const[{isDragging},drag,dragPrevi......
  • Kubernetes 学习总结(19)—— Kubernetes 集群管理平台如何选择?Rancher vs KubeSphere
    Kubernetes学习总结(19)——Kubernetes集群管理平台如何选择?RanchervsKubeSphere 前言Kubernetes(K8s)集群管理平台都是基于Kubernetes提供功能,可以说他们是在K8s......
  • 基于Kubernetes的CI/CD实践
    K8s已经成为一线大厂分布式平台的标配技术。你是不是还在惆怅怎么掌握它?来这里,大型互联网公司一线工程师亲授,不来虚的,直接上手实战,3天时间带你搭建K8s平台,快速学会K8s,点......