Kubernetes

使用kubeadm安装Kubernetes 1.8

2017-09-30
Kubernetes

kubeadm是Kubernetes官方提供的快速安装和初始化Kubernetes集群的工具,目前的还处于孵化开发状态,伴随Kubernetes每个版本的发布都会同步更新。 当然,目前的kubeadm是不能用于生产环境的。 但伴随着Kubernetes每次版本升级,kubeadm都会对集群配置方面的一些实践做调整,通过实验kubeadm我们可以学习到Kubernetes官方在集群配置上一些新的最佳实践。

...

升级Kubernetes Dashboard小记

2017-09-04
Kubernetes

目前我们线上环境使用的Kubernetes Dashboard的版本是1.6.1,这里记录一下升级到1.6.3的过程。

Dashboar和Heapster组件主要包含如下部署文件:

当前对应的docker镜像及版本如下:

  • gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.3
  • gcr.io/google_containers/heapster-amd64:v1.4.0
  • gcr.io/google_containers/heapster-influxdb-amd64:v1.3.3

从gcr pull这些镜像,并将其推送到我们的docker私有仓库:

...

在Kubernetes上使用Sateful Set部署RabbitMQ集群

2017-09-01
Kubernetes

前面我们已经在Kubernetes上部署了Redis - 《在Kubernetes上使用Sateful Set部署Redis》。 本篇我们继续把RabbitMQ也跑在K8S上。

1.RabbitMQ的基础知识 #

在正式开始部署工作之前,我们先来复习一下RabbitMQ的一些基础知识。

RabbitMQ内建的集群功能可以实现其高可用,允许消费者和生产者在RabbitMQ节点崩溃的情况下继续工作,同时可以通过添加更多的节点来提高消息处理的吞吐量。

...

Kubernetes DaemonSet的滚动升级

2017-08-25
Kubernetes

DaemonSet好比Kubernetes集群Node的守护进程,可以保证在每个Node上(或者一部分Node上)都运行同一个Pod。 目前我们的线上环境主要用到以下两个DaemonSet:

  • kube-flannel-ds 这个是部署Kubernetes集群时选用的是flannel network add-on
  • fluent-bit 这个是用来在部署在各个Node上,收集各个Node上容器的日志。我们选用的日志收集方案是EFK(Elasticsearch+Fluent-bit+Kibana),后边有时间再写点fluent-bit的内容

我们目前线上Kubernetes的版本总是落后最新的release版本,例如现在Kubernetes最新是1.7,我们使用1.6.x。但是我们注意到Kubernetes 1.7中很多外部组件、Addon都做了更新。我们在使用1.6.x的过程中会考虑提前升级这些组件,以便于后续顺利将Kubernetes升级到1.7。DaemonSet的升级就是需要考虑的。

...

Kubernetes的Cron Job

2017-08-21
Kubernetes

Kubernetes集群使用Cron Job管理基于时间的作业,可以在指定的时间点执行一次或在指定时间点执行多次任务。 一个Cron Job就好像Linux crontab中的一行,可以按照Cron定时运行任务。

定时任务对我们并不陌生,例如Linux的crontab,各种编程语言都内置了定时任务支持,这在我们应用开发中比较常见,但这种定时任务在分布式系统中使用会有限制,因此需要分布式计划任务。 Kubernetes的CronJob可以理解为Kubernetes对分布式计划任务的支持。

...

Kubelet线上配置整理

2017-07-29
Kubernetes

我们线上环境当前的Kubernetes版本为1.6.7,这里整理kubelet的启动参数,并根据我们线上使用情况做一个整理。

kubelet的启动参数 #

根据官方文档kubelet,当前kubelet启动参数如下:

  • --address ip kubelet绑定的主机IP地址,默认为0.0.0.0表示绑定全部网络接口
  • --allow-privileged 是否允许以特权模式启动容器。当前默认值为false
  • --anonymous-auth 是否启用kubelet server的匿名访问,默认为true,表示启用匿名访问。对于匿名请求将认为其用户名为system:anonymous,所属的组为system:unauthenticated
  • --authentication-token-webhook 使用TokenReview API来进行token认证
  • --authentication-token-webhook-cache-ttl duration webhook token认证缓存响应时长,默认值2m0s
  • --authorization-mode string kubelet server的认证模式,可以选择AlwaysAllow或者Webhook,如果选择为Webhook将使用SubjectAccessReview进行授权。默认值为AlwaysAllow
  • --authorization-webhook-cache-unauthorized-ttl duration 授权模式为Webhook时,已被授权内容的缓存时长,默认值为5m0s
  • --authorization-webhook-cache-unauthorized-ttl duration 授权模式为Webhook时,未被授权内容的缓存时长,默认值为30s
  • --cadvisor-port int32 本地cAdvisor监听的端口号,默认为4194
  • --cert-dir string TLS证书目录,如果设置了–tls-cert-file和–tls-private-key-file,这个选项将被忽略。默认值为/var/run/kubernetes
  • --cgroup-driver string kubelet操纵cgroups的驱动,可以选择cgroupfs或systemd。默认值为cgroupfs
  • -cgroup-root string 为pods设置的root cgroup,如果不设置,将使用容器运行时的默认设置。默认值为""
  • -cgroups-per-qos 是否启动QoS级的CGroups支持,如果启用kubelet会自动创建顶级的cgroup来控制Node节点的可分配性,更好的保证QoS。默认值为true
  • --chaos-chance float 随机产生客户端错误的概率,仅用于测试场景,默认值为0,即不产生客户端错误
  • --cloud-config string 云服务商配置文件路径,默认值为""
  • --cloud-provider string 云服务商名称,默认值为"auto-detect"表示自动检测,设置为空表示无云服务商
  • --cluster-dns stringSlice 集群内DNS服务的IP地址
  • --cluster-domain string 集群的域名
  • --cni-bin-dir string CNI插件可执行文件目录,默认值为"/opt/cni/bin"
  • --cni-conf-dir string CNI配置文件目录,默认值为"/etc/cni/net.d"
  • --container-runtime string 容器运行时类型,当前可选值为"docker"或"rkt",默认值为"docker"
  • --container-runtime-endpoint string 容器运行时服务的endpoint地址,当前在Linux上支持unix socket,默认值为"unix:///var/run/dockershim.sock"
  • --containerized 是否将kubelet运行在容器中,仅测试场景使用,默认值为false
  • --cpu-cfs-quota 是否启用 CPU CFS quota,用于设置容器的CPU限制,默认值为true
  • --docker-endpoint string docker服务的务的endpoint地址,默认值为"unix:///var/run/dockershim.sock"
  • --enable-controller-attach-detach 是否启用Attach/Detach Controller进行调度到该Node的volumed attach与detach操作,同时禁用kubelet执行attach、detach操作。默认值为true
  • --enable-custom-metrics 是否启用采集自定义性能指标
  • --enable-debugging-handlers 是否启用提供远程访问本节点容器的日志、进入容器执行命令等相关的Rest服务。默认值为true
  • --enable-server 是否启用kubelet server,即启动kubelet上的http rest server,此server提供了获取本节点上Pod信息以及其他管理监控相关的rest接口。默认值为true
  • --event-burst int32 临时允许Event记录突发的最大数量,当event-qps>0时生效。默认值为10
  • --event-qps int32 设置大于0的值表示限制每秒能创建的Event数量,设置为0表示不限制。默认值为5
  • --eviction-hard string 触发Pod Eviction操作的一组硬阀门设置,例如可以设置"memory.available<1Gi"。默认值为"memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%"
  • -eviction-max-pod-grace-period int32 终止Pod操作给Pod自行停止预留的时间,单位为秒。时间达到将触发Pod Eviction操纵。设置为负数表示将使用Pod中指定的值
  • --eviction-pressure-transition-period duration kubelet触发Pod eviction之前等待的最长时间,默认值5m0s
  • --eviction-soft string 触发Pod Eviction操作的一组软阀门设置,当Pod的响应时间超过grace-period后触发。例如"memory.available<1.5Gi"
  • -eviction-soft-grace-period string 触发Pod Eviction操作的软阀门的等待时间设置。例如"memory.available=1m30s"
  • --exit-on-lock-contention 设置为true时表示当有文件锁存在时,kubelet也可以退出
  • --file-check-frequency duration 在File Source作为Pod源的情况下,kubelet定期检查配置文件变化的时间间隔,文件发生变化后,kubelet重新加载文件内容。默认值为20s
  • --google-json-key string 用于Google Cloud Platform的Service Account进行鉴权的JSON key
  • --hairpin-mode string 设置hairpin模式,即kubelet设置hairpin NAT的方式。该模式允许后端Endpoint在访问本身Service时能够再次loadbalance回本身。可以设置的值包括: “promiscuous-bridge”, “hairpin-veth"和"none”。默认值为"promiscuous-bridge"
  • --hostname-override string 设置当前Node在集群中的名称,如果不设置将使用本机的hostname
  • --http-check-frequency duration 在HTTP URL Source作为Pod源的情况下,kubelet定期检查URL返回内容是否有更新的时间周期,默认为20s
  • --image-gc-high-threshold int32 镜像垃圾回收上限,当磁盘使用空间达到该百分比时,镜像垃圾回收将持续工作。默认85
  • __--image-gc-low-threshold int32__ 镜像垃圾回收下限,在磁盘使用空间到达该百分比之前,镜像垃圾回收不会启用。默认80
  • --kube-api-burst int32 发送到API Server的每秒请求数量,默认为10
  • --kube-api-content-type string 发送到API Server的请求的Content-type,默认为application/vnd.kubernetes.protobuf
  • --kube-api-qps int32 与API Server通信的QPS值,默认值为5
  • --kube-reserved mapStringString Kubernetes系统预留的资源配置,以一组ResourceName=ResourceQuantity的格式进行配置,例如"cpu=200m,memory=500Mi, storage=1Gi",详见http://kubernetes.io/docs/user-guide/compute-resources。默认值为空
  • --kubeconfig string kubeconfig配置文件路径,在该配置文件中包含Master地址信息以及必要的认证信息
  • --kubelet-cgroups string 可选的kubelet运行所需要的cgroups名称
  • --lock-file string kubelet使用的lock文件,Alpha特性
  • --manifest-url string 为HTTP URL Source源类型时,kubelet用来获取Pod定义的URL地址,此URL返回一组Pod的定义。(静态Pod)
  • --manifest-url-header string 访问manifest-url地址时使用的HTTP头信息,以key:value格式表示
  • --max-open-files int kubelet打开的最大文件数量。默认1000000
  • --max-pods int32 kubelet所能运行的最大Pod数量,默认110
  • --minimum-image-ttl-duration duration 不再使用的镜像在被清理之前的最小存活时间,超过此存活时间的镜像被标记为可被GC清理,默认值为2m0s
  • --network-plugin string 自定义的网络插件名称,Pod生命周期中的一些事件都会调用此网络插件进行处理
  • --node-ip string 设置当前Node的IP
  • --node-labels mapStringString kubelet注册当前Node时设置的Label,以key=value的格式表示,多个labe以逗号分隔
  • --node-status-update-frequency duration kubelet向Master汇报Node状态的时间间隔,它必须和controller-manager中nodecontroller的nodeMonitorGracePeriod一同工作。 默认值为10s
  • --oom-score-adj int32 kubelet进程的oom_score_adj参数值,取值范围[-1000, 1000]。默认值-999
  • --pod-cidr string 用于给Pod分配IP地址的CIDR地址池,仅在单机模式中使用。在一个集群中kubelet会从API Server获取CIDR设置
  • --pod-infra-container-image string Pod的pause镜像,默认值为gcr.io/google_containers/pause-amd64:3.0
  • --pod-manifest-path string 为File Source源类型时,kubelet用来获取Pod定义的路径。(静态Pod)
  • --pods-per-core int32 当前kubelet上每个core可运行的pod的数量。设置的值不能超过max-pods,设置为0则表示不限制
  • --port int32 kubelet server监听的端口,默认值为10250
  • --read-only-port int32 kubelet服务监听的“只读”的端口号,默认值为10255,设置为0表示不启用
  • --really-crash-for-testing 设置为true表示发生panic时崩溃,仅用于测试
  • --register-node 设置为true表示将当前Node注册到API Server,默认值为true
  • --registry-burst int32 最多同时拉去镜像的数量,默认值为10
  • --registry-qps int32 在Pod创建过程中容器的镜像需要从Registry拉取,由于拉取镜像的过程会消耗大量带宽,因此可能需要限速,此参数可与registry-burst一起使用来限制每秒拉取多少个镜像。如果设置为5,则表示每秒最多拉取5个镜像,如果为0则表示不限速。默认值为5
  • --require-kubeconfig 如果设置为true,当存在配置错误时kubelet进程将退出,同时会忽略api-server参数,而优选kubeconfig file
  • --resolv-conf string 命名服务配置文件,用于容器内应用的DNS解析,默认为/etc/resolv.conf
  • --rkt-api-endpoint string rkt API服务的URL,container-runtime为rkt时生效
  • --rkt-path string rkt二进制文件路径,未指定时从$PATH中查找,container-runtime为rkt时生效
  • --root-dir string kubelet运行的根目录,将保持Pod和volume的相关文件,默认值为/var/lib/kubelet
  • --runonce 设置为true表示在创建完Pod后立即退出kubelet进程,域api-server和enable-server参数互斥
  • --runtime-cgroups string 为容器运行时设置的cgroup
  • -runtime-request-timeout duration 除了长时间运行的request,对其他request的超时设置,包括pull, logs, exec, attach等操作,当达到超时时间时,request会被取消掉。默认值为2m0s
  • --seccomp-profile-root string seccomp配置文件目录,默认为/var/lib/kubelet/seccomp
  • --serialize-image-pulls 顺序pull镜像,默认值为true
  • --streaming-connection-idle-timeout duration 容器中执行命令或进行端口转发的过程会产生输入输出流,该参数用来控制连接空闲时关闭的时间,默认4h0m0s
  • --sync-frequency duration 同步正在运行的容器的配置的时间间隔,默认为1m0s
  • --system-cgroups / kubelet为运行非kernel进程设置的cgroup名称
  • --system-reserved mapStringString 系统预留的资源配置,以一组ResourceName=ResourceQuantity的格式进行配置,如"cpu=200m,memory=500Mi",详见http://kubernetes.io/docs/user-guide/compute-resources。默认值为空
  • --tls-cert-file string x509证书文件路径,用于HTTPS认证
  • --tls-private-key-file string x509私钥文件路径
  • --volume-plugin-dir string 搜索第三方volume插件的目录,默认值/usr/libexec/kubernetes/kubelet-plugins/volume/exec/
  • --volume-stats-agg-period duration kubelet计算所有Pod和Volume的磁盘使用情况的时间间隔,设置为0表示禁用此功能。默认值为1m0s

线上配置 #

根据线上Node配置的实际情况重点关注如下配置:

...

使用kubeadm安装Kubernetes 1.7

2017-07-04
Kubernetes

kubeadm是Kubernetes官方提供的快速安装和初始化Kubernetes集群的工具,目前的还处于孵化开发状态,伴随Kubernetes每个版本的发布都会同步更新。 当然,目前的kubeadm是不能用于生产环境的。 但伴随着Kubernetes每次版本升级,kubeadm都会对集群配置方面的一些实践做调整,通过实验kubeadm我们可以学习到Kubernetes官方在集群配置上一些新的最佳实践。 例如从Kubernetes 1.6开始kubeadm的目标就是可以快速初始化一个更加安全的Kubernetes集群,Kubernetes 1.6进入beat的RBAC,在这版的kubeadm就有了集成。 目前,我们一套Kubernetes 1.6环境的部署,就是先根据kubeadm中的配置实践整理,再编写成ansible role部署的:

...

使用Ansible部署Kubernetes 1.6高可用集群

2017-06-06
Kubernetes

我们已经用ansible在新的环境中部署了etcd和docker,接下来使用ansible部署Kubernetes 1.6集群。 由于对ansible的使用已经没有什么问题了,因此本篇记录的侧重点是白话描述一下部署的具体步骤,以及部署过程踩的一些坑。 因为前段日子写过一篇《Kubernetes 1.6 高可用集群部署》,本次在编写ansible部署Kubernetes的roles时主要是一这篇文章里手动部署的过程为参考。

...

Kubernetes Pod调度入门

2017-06-01
Kubernetes

最近两周一直没有抽出时间写点Kubernetes的东西,这篇学习一下Kubernetes对Pod的调度。我们先来复习一下Kubernetes的一些基本概念。

Kubernetes的基本概念 #

Kubernetes是一个基于容器技术的分布式架构平台,它首先是一个开源的容器集群管理系统,又是一个分布式系统开发、运维和支撑平台。 Kubernetes为容器应用提供了服务注册和发现、负载均衡、服务部署和运行、服务滚动升级、在线扩容和缩容、资源调度、资源配额管理等功能。 可以说Kubernetes具备完备的集群管理能力,贯串分布式系统开发、测试、部署、运维监控各个环节。

...

© 2024 青蛙小白