请读者务必保持环境一致

安装过程中需要下载所需系统包,请务必使所有节点连上互联网

本次安装的集群节点信息


实验环境:VMware的虚拟机

IP地址 主机名 CPU 内存
192.168.77.133 k8s-m1 6核 6G
192.168.77.134 k8s-m2 6核 6G
192.168.77.135 k8s-m3 6核 6G
192.168.77.136 k8s-n1 6核 6G
192.168.77.137 k8s-n2 6核 6G
192.168.77.138 k8s-n3 6核 6G

另外由所有 master节点提供一组VIP 192.168.77.140

本次安装的集群拓扑图


 
image.png

本次使用到的ROLE

ansible role怎么用请看下面文章

集群安装方式

以static pod方式安装kubernetes ha高可用集群。

Ansible管理节点操作


OS: CentOS Linux release 7.4.1708 (Core)
ansible: 2.5.3

安装Ansible
# yum -y install ansible
# ansible --version
ansible 2.5.3
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
配置ansible
# sed -i 's|#host_key_checking|host_key_checking|g' /etc/ansible/ansible.cfg
下载role
# yum -y install git
# git clone https://github.com/kuailemy123/Ansible-roles.git /etc/ansible/roles
正克隆到 '/etc/ansible/roles'...
remote: Counting objects: 1767, done.
remote: Compressing objects: 100% (20/20), done.
remote: Total 1767 (delta 5), reused 24 (delta 4), pack-reused 1738
接收对象中: 100% (1767/1767), 427.96 KiB | 277.00 KiB/s, done.
处理 delta 中: 100% (639/639), done.
下载kubernetes-files.zip文件

这是为了适应国情,导出所需的谷歌docker image,方便大家使用。

文件下载链接:https://pan.baidu.com/s/1BNMJLEVzCE8pvegtT7xjyQ 密码:qm4k

# yum -y install unzip
# unzip kubernetes-files.zip -d /etc/ansible/roles/kubernetes/files/
配置主机信息
# cat /etc/ansible/hosts
[k8s-master]
192.168.77.133
192.168.77.134
192.168.77.135
[k8s-node]
192.168.77.136
192.168.77.137
192.168.77.138
[k8s-cluster:children]
k8s-master
k8s-node
[k8s-cluster:vars]
ansible_ssh_pass=123456

k8s-master组为所有的master节点主机。k8s-node组为所有的node节点主机。k8s-cluster包含k8s-masterk8s-node组的所有主机。

请注意, 主机名称请用小写字母, 大写字母会出现找不到主机的问题。

配置playbook
# cat /etc/ansible/k8s.yml
---
# 初始化集群
- hosts: k8s-cluster
serial: "100%"
any_errors_fatal: true
vars:
- ipnames:
'192.168.77.133': 'k8s-m1'
'192.168.77.134': 'k8s-m2'
'192.168.77.135': 'k8s-m3'
'192.168.77.136': 'k8s-n1'
'192.168.77.137': 'k8s-n2'
'192.168.77.138': 'k8s-n3'
roles:
- hostnames
- repo-epel
- docker # 安装master节点
- hosts: k8s-master
any_errors_fatal: true
vars:
- kubernetes_master: true
- kubernetes_apiserver_vip: 192.168.77.140
roles:
- kubernetes # 安装node节点
- hosts: k8s-node
any_errors_fatal: true
vars:
- kubernetes_node: true
- kubernetes_apiserver_vip: 192.168.77.140
roles:
- kubernetes # 安装addons应用
- hosts: k8s-master
any_errors_fatal: true
vars:
- kubernetes_addons: true
- kubernetes_ingress_controller: nginx
- kubernetes_apiserver_vip: 192.168.77.140
roles:
- kubernetes

kubernetes_ingress_controller 还可以选择traefik

执行playbook
# ansible-playbook /etc/ansible/k8s.yml
......
real 26m44.153s
user 1m53.698s
sys 0m55.509s
 
asciicast
验证集群版本
# kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:05:37Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
验证集群状态
kubectl -n kube-system get po -o wide -l k8s-app=kube-proxy
kubectl -n kube-system get po -l k8s-app=kube-dns
kubectl -n kube-system get po -l k8s-app=calico-node -o wide
calicoctl node status
kubectl -n kube-system get po,svc -l k8s-app=kubernetes-dashboard
kubectl -n kube-system get po,svc | grep -E 'monitoring|heapster|influxdb'
kubectl -n ingress-nginx get pods
kubectl -n kube-system get po -l app=helm
kubectl -n kube-system logs -f kube-scheduler-k8s-m2
helm version

这里就不写结果了。

查看addons访问信息

在第一台master服务器上

kubectl cluster-info
Kubernetes master is running at https://192.168.77.140:6443
Elasticsearch is running at https://192.168.77.140:6443/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
heapster is running at https://192.168.77.140:6443/api/v1/namespaces/kube-system/services/heapster/proxy
Kibana is running at https://192.168.77.140:6443/api/v1/namespaces/kube-system/services/kibana-logging/proxy
kube-dns is running at https://192.168.77.140:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
monitoring-grafana is running at https://192.168.77.140:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
monitoring-influxdb is running at https://192.168.77.140:6443/api/v1/namespaces/kube-system/services/monitoring-influxdb:http/proxy
# cat ~/k8s_addons_access

集群部署完成后,建议重启集群所有节点。

作者:lework
链接:https://www.jianshu.com/p/265cfb0811b2
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

利用ansible来做kubernetes 1.10.3集群高可用的一键部署的更多相关文章

  1. 基于腾讯云CLB实现K8S v1.10.1集群高可用+负载均衡

    概述: 最近对K8S非常感兴趣,同时对容器的管理等方面非常出色,是一款非常开源,强大的容器管理方案,最后经过1个月的本地实验,最终决定在腾讯云平台搭建属于我们的K8S集群管理平台~ 采购之后已经在本地 ...

  2. 使用kubeadm搭建Kubernetes(1.10.2)集群(国内环境)

    目录 目标 准备 主机 软件 步骤 (1/4)安装 kubeadm, kubelet and kubectl (2/4)初始化master节点 (3/4) 安装网络插件 (4/4)加入其他节点 (可选 ...

  3. kubernetes haproxy+keepalive实现master集群高可用

    前言 master的HA,实际是apiserver的HA.Master的其他组件controller-manager.scheduler都是可以通过etcd做选举(--leader-elect),而A ...

  4. 使用Kubeadm搭建Kubernetes(1.12.2)集群

    Kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,在2018年将进入GA状态,说明离生产环境中使用的距离越来 ...

  5. 利用Kubernetes中的leaderelection实现组件高可用

    在Kubernetes中,通常kube-schduler和kube-controller-manager都是多副本进行部署的来保证高可用,而真正在工作的实例其实只有一个.这里就利用到 leaderel ...

  6. kubeadm安装kubernetes 1.13.1集群完整部署记录

    k8s是什么 Kubernetes简称为k8s,它是 Google 开源的容器集群管理系统.在 Docker 技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提 ...

  7. Kubernetes Ingress Controller的使用及高可用落地

    Kubernetes Ingress Controller的使用及高可用落地 看懂本文要具备一下知识点: Service实现原理和会应用 知道反向代理原理,了解nginx和apache的vhost概念 ...

  8. [原创]自动化部署K8S(v1.10.11)集群

          标准运维实现自动化部署K8S集群主要分两步,第一步是部署gse-agent,拱第二步执行部署. 第一步:部署gse-agent.如下: 第二步:部署k8s集群.主要通过作业平台分为5小步执 ...

  9. Dubbo的10种集群容错模式

    学习Dubbo源码的过程中,首先看到的是dubbo的集群容错模式,以下简单介绍10种集群容错模式 1.AvailableCluster 顾名思义,就是可用性优先,遍历所有的invokers,选择可用的 ...

随机推荐

  1. Visual Studio AI配置环境

    参考链接:http://www.cnblogs.com/ms-uap/p/9123033.html 背景: 1.能联网的电脑:Win7 64 SP1 2.鼠标.键盘.显示器好使 3.已安装VS2010 ...

  2. Teamproject Week7 --Scrum Meeting #1 2014.10.28

    这是团队的第一次会议,具体议题如下: 1)我们明确了团队成员的职责所需: PM职责:根据项目范围.质量.时间与成本的综合因素的考虑,进行项目的总体规划与阶段计划.  控制项目组各成员的工作进度,即时了 ...

  3. 团队项目之开题scrum meeting

    scrum meeting 会议记 一.会议要点: 1.确定成员角色: 2.讨论关于项目的疑问: 3.制定一周内成员任务. 二.具体会议内容: 1.成员角色: PM:杨伊 Dev:徐钧鸿 刘浩然 张艺 ...

  4. 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...

  5. 20162314 《Program Design & Data Structures》Learning Summary Of The First Week

    20162314 2017-2018-1 <Program Design & Data Structures>Learning Summary Of The First Week ...

  6. C#和.net框架

    第一章C#和.net框架 c#只是.net的一部分,.net不只包含C#.C#是一种程序语言,.net是一个框架/平台 C#和.NET框架 在.NET之前 20世纪90年代,微软平台多数程序员使用VB ...

  7. 图层损坏 E/ArcGIS﹕ The map or layer has been destroyed or recycled. 资源未释放

    看到论坛上有个网友和我一样的问题: The map or layer has been destroyed or recyled t Hello, I have a problem when the ...

  8. 剑指offer:替换空格

    题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 一开始没理解,函数中 ...

  9. Internet History, Technology and Security (Week2)

    Week2. History: The First Internet - NSFNet coursera address Supercomputers Justify a National Netwo ...

  10. week2:个人博客作业

    1.这周写程序感想: 昨天差不多,也是这个时候看些的程序,写了4个小时程序,感触颇多.昨日,原打算,就完成程序就吧这个随笔写完结果,由于各种原因,没写一直拖到现在.就做昨天写的程序,本身题目很简单,主 ...