在kubernets中不同命名空间的服务相互访问

涉及到的是Pod和Service之间的相互访问,主要格式如下:

详细请参考官方文档:https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

Continue reading “在kubernets中不同命名空间的服务相互访问”

docker build过程中DNS失效问题解决

该问题是在我使用alpine的apk安装相关软件时发现的,无论如何也无法访问第三方网站,同样在ubuntu中也是如此。

不仅仅是docker build过程中存在DNS解析问题,其实默认在docker运行时,在docker内部也无法和宿主机共享DNS解析服务。

解决方案如下:

Continue reading “docker build过程中DNS失效问题解决”

Kubernetes调度之亲和性和反亲和性

背景

Kubernetes中的调度策略可以大致分为两种,一种是全局的调度策略,要在启动调度器时配置,包括kubernetes调度器自带的各种predicates和priorities算法,具体可以参看文章《Kubernetes调度详解》;另一种是运行时调度策略,包括nodeAffinity(主机亲和性),podAffinity(POD亲和性)以及podAntiAffinity(POD反亲和性)。

nodeAffinity 主要解决POD要部署在哪些主机,以及POD不能部署在哪些主机上的问题,处理的是POD和主机之间的关系。

podAffinity 主要解决POD可以和哪些POD部署在同一个拓扑域中的问题(拓扑域用主机标签实现,可以是单个主机,也可以是多个主机组成的cluster、zone等。),podAntiAffinity主要解决POD不能和哪些POD部署在同一个拓扑域中的问题。它们处理的是Kubernetes集群内部POD和POD之间的关系。

三种亲和性和反亲和性策略的比较如下表所示:

策略名称 匹配目标 支持的操作符 支持拓扑域 设计目标
nodeAffinity 主机标签 In,NotIn,Exists,DoesNotExist,Gt,Lt 不支持 决定Pod可以部署在哪些主机上
podAffinity Pod标签 In,NotIn,Exists,DoesNotExist 支持 决定Pod可以和哪些Pod部署在同一拓扑域
PodAntiAffinity Pod标签 In,NotIn,Exists,DoesNotExist 支持 决定Pod不可以和哪些Pod部署在同一拓扑域

本文主要介绍如何使用亲和性和反亲和性做资源调度。 Continue reading “Kubernetes调度之亲和性和反亲和性”

kubectl 命令自动补全

在k8s 1.3版本之前,设置kubectl命令自动补全是通过以下的方式:

但是在k8s 1.3版本,源码contrib目录中已经没有了completions目录,无法再使用以上方式添加自动补全功能。

 

1.3版本中,kubectl添加了一个completions的命令, 该命令可用于自动补全

通过以上方法进行配置了,便实现了kubectl的自动补全。

Continue reading “kubectl 命令自动补全”

helm简介、安装、使用

Helm简介

利用Kubernetes部署一个应用,需要Kubernetes原生资源文件如deployment、replicationcontroller、service或pod 等。而对于一个复杂的应用,会有很多类似上面的资源描述文件,如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源文件,且由于缺少对发布过的应用版本管理和控制,使Kubernetes上的应用维护和更新等面临诸多的挑战,而Helm可以帮我们解决这些问题。

Helm架构

Helm基本架构如下:

helm_arch.jpg

Helm用途

做为Kubernetes的一个包管理工具,Helm具有如下功能:

  • 创建新的chart
  • chart打包成tgz格式
  • 上传chart到chart仓库或从仓库中下载chart
  • 在Kubernetes集群中安装或卸载chart
  • 管理用Helm安装的chart的发布周期

Helm有三个重要概念:

  1. chart:包含了创建Kubernetes的一个应用实例的必要信息
  2. config:包含了应用发布配置信息
  3. release:是一个chart及其配置的一个运行实例

Continue reading “helm简介、安装、使用”

使用docker安装kibana

使用dockerhub镜像运行:

其中指定的ES地址为docker虚拟IP地址,172.17.0.1为宿主docker虚拟IP地址,当然也可以指定对应ES容器的IP地址。

随后打开 http://127.0.0.1:5061/ ,可以看到kibana界面。 Continue reading “使用docker安装kibana”

使用docker安装ElasticSearch

方案一:使用dockerhub镜像

成功后访问:http://127.0.0.1:9200,该镜像默认不需要任何账号密码验证。

方案二:使用elastic镜像

具体请参考官方网站手册:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/docker.html

开发环境可以通过以下命令执行ES:

成功后访问:http://127.0.0.1:9200,默认账号密码:elastic/changeme

Continue reading “使用docker安装ElasticSearch”

Kubernetes配置文件示例

Pod

Continue reading “Kubernetes配置文件示例”

dockerfile示例

基本指令

Continue reading “dockerfile示例”

使用minikube在本机搭建kubernetes集群

Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作。如果你曾经用过Docker部署容器,那么可以将Docker看成Kubernetes底层使用的组件,Kubernetes是Docker的上层封装,通过它可以很方便的进行Docker集群的管理。今天我们使用minikube在单机上进行Kubernetes集群的部署,目的是让我们对k8s有个初步的认识。 Continue reading “使用minikube在本机搭建kubernetes集群”