kubernates学习笔记

第1章 先把Kubernetes跑起来

先跑起来

Kubernates官网已经准备了现成的最小可用系统
参考:https://kubernetes.io/docs/
kubernates学习笔记

功能和使用方法快速体验

创建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
kubernates学习笔记

访问应用

默认情况下,所有pod只能在集群内部访问,为了能够从外部访问应用题,需要将容器的端口映射到节点的端口。
kubectl expose deployment/kubernetes-bootcamp --type=“NodePort” --port 8080
kubectl get services
kubernates学习笔记

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
    kubernates学习笔记
  • 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里面的releaseveer7sedsedis/releaseveer替换为7即可,可以用sed命令,如下: sed -i ‘s/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