kubernates学习笔记
k8s基础实践
第1章 先把Kubernetes跑起来
先跑起来
Kubernates官网已经准备了现成的最小可用系统
参考:https://kubernetes.io/docs/
功能和使用方法快速体验
创建Kubernetes集群(cluster)
minikube start之后就创建好了一个但节点的kubernetes集群
kubectl cluster-info 查看集群信息
kubectl get nodes 查看节点信息
kubectl version 查看集群版本信息
此时还没有产生pod
部署应用(deployment)
当创建完一个应用(deployment)的时候,k8s创建一个pod,
pod是k8s调度的最小单位,是容器的集合
kubectl get deployments 查看应用信息
kubectl get pod 查看pod
访问应用
默认情况下,所有pod只能在集群内部访问,为了能够从外部访问应用题,需要将容器的端口映射到节点的端口。
kubectl expose deployment/kubernetes-bootcamp --type=“NodePort” --port 8080
kubectl get services
scale应用
默认情况下只产生一个副本,可以执行如下命令增加或者减少副本个数
kubectl scale deployments/kubernetes-bootcamp --replicas=3
用curl访问应用,每次请求会发送到不同的pod,副本轮询处理,这样就实现了负载均衡
滚动更新
kubectl describe deployments/kubernetes-bootcamp
可以看到当前image版本为V1,如何升级到V2?
使用如下命令:
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
通过命令kubectl get pods可以查看滚动更新的过程:V1的pod被逐个删除,同时启动了新的V2 pod。
如果要回滚?
使用命令:kubectl rollout undo deployments/kubernetes-bootcamp
第2章 重要概念
集群 cluster
是计算、存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用
Master
是cluster的大猫,主要职责:调度,即决定将应用放在哪里运行,为了实现高可用,可以运行多个Master。Master运行在linux os上,可以是物理机或者是虚拟机。
Node
==Node的职责是运行容器应用,由master管理,node负责监控并回报容器的状态,同时根据master的要求管理容器的生命周期,node运行在linux os上,可以是物理机或者是虚拟机。
Pod
是k8s最小工作但愿,每个pod包含一个或多个容器。pod中的容器会被作为一个整体被master调度到一个node上运行。
引入Pod的意义:
page10
1.可管理性:以pod为最小单位进行调度、扩展、共享资源、管理生命周期
2.通信和资源共享:pod中的所有容器使用同一个网络namespace,即相同的ip和port空间,他们可以直接使用localhost通信;共享存储;
哪些容器应该放到一个pod中?
这些容器联系必须非常紧密,而且需要直接共享资源
Controller
K8s通常不直接创建Pod,而是通过Controller来管理Pod。Controller中定义了pod的部署属性,比如几个副本、在什么样的Node上运行等。
Service
Deployement可以部署多个副本,每个Pod都有自己的副IP,外界如何访问这些副本?
Pod会被频繁的销毁和重启,IP实时变化,不能用IP?
答案是通过service。
K8s service 定义了外界访问一组特定Pod的方式。service有自己的IP和端口,service为Pod提供了负载均衡。
K8S 运行Pod与访问Pod这两项任务分别由Controller和Service执行。
NameSpace
如果由多个用户或者项目组使用同一个k8s cluster,如何将他们创建的controller,pod等资源分开呢? 答案:Namespace
Namespace可以将一个物理的cluster逻辑上划分为多个虚拟cluster,不同namespace里的资源是完全隔离的。
k8s默认创建了两个namespace:
default: 默认的namespace
kube-system: K8s自己创建的的系统资源放到这个namespace
第3章 部署k8s集群
reference:
https://www.kubernetes.org.cn/7189.html
- cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system - 2 安装软件包过程中遇到问题
-Redhat7 将本地yum源修改为阿里镜像源,安装软件的时候“HTTP Error 404 - Not Found”的解决办法
参考文档https://blog.****.net/weixin_43211760/article/details/8392932
报错如下:
http://mirrors.aliyun.com/centos/7Server/os/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
Trying other mirror
解决办法:
1.将CentOS-Base.repo里面的releasever/7/’ CentOS-Base.repo
2.然后清除一下本地缓存
yum clean all
yum makecache #建立缓存
结果如下:
阿里云镜像源:(下载到/etc/yum.repos.d目录下)
CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
第8章 健康检查
Kubernetes默认的健康检查机制
每个容器启动时都会执行一个进程,此进程由Dockerfile的CMD或ENTRYPOINT指定,如果进程推出时返回码非零,则认为容器发生故障,k8s会根据restartPolicy重启容器。
kubectl apply -f health check.yml
Kubectl get pod healthcheck
Liveness探测
Readiness探测
- Liveness探测(判断容器是否需要重启以实现自愈)
让用户可以自定义判断容器是否健康的条件,如果探测失败,k8s就会重启容器。
initialDelaySeconds:容器启动多少秒之后执行liveness探测
periodSeconds:每隔多少秒执行一次liveness探测,连续执行3次失败,则会杀掉并重启容器 - Readiness探测(判断容器是否已经准备好对外提供服务)
将容器设置为不可用,不接收service转发的请求
healthcheck应用场景
1.scale up
对于多副本应用,当执行scale up操作时,新副本会作为backend被添加到service的负载均衡中,与已有副本一起处理客户的请求,考虑到应用都需要一个准备阶段,比如加载缓存数据,链接数据库等,从容器真正启动到真正能够提供服务是需要一段时间的,可以通过readiness探测判断容器是否就绪,避免将请求发送到还没有准备好的backend。
2.滚动更新Rolling Update
第9章 数据管理
kubernetes volume
容器被销毁时,保存在容器内部文件系统中的数据都会被清除。
为了持久化报存容器的数据,可以使用kubernetes volume。
K8s volume也支持多种backend类型,包活emptyDir、hostpath、GCE persistent Disk,NFS等
-
emptyDir
是最基础的Volume类型,对容器是持久的,对于pod不是,生命周期与pod一致
pod中的所有容器都可以共享Volume,他们可以指定各自mount的路径。 -
hostPath
是将Docker hist文件系统中已经存在的目录mount给pod的容器,大部分应用都会使用hostPath volumn,因为这实际上增加了pod和节点的耦合,限制了pod的使用,不过那些需要访问k8s或docker内部数据的应用需要使用hostPath。 -
外部Storage Provider
直接使用云硬盘作为Volumn
PV& PVC
第14章 Kubernetes集群监控
针对node和pod的监控方案
Weave scope
是docker和kubernetes可视化监控工具,scope提供了自上而下的集群基础设置和应用的完成视图,用户可以轻松对分布式的容器化应用进行实时监控和问题诊断。
Heapster
是kubernetes原生的集群监控方案,以pod的形式运行,它会自动发现集群节点,从节点上的kubelet获取监控数据,kubelet则是从节点上的cAdvisor收集数据。
Prometheus Operator