前两期的文章介绍了Kubernetes基本概念和架构用Kubeadm+Ansible搭建Kubernetes集群所需要的工具及其作用。本篇介绍怎么使用Ansible安装Kubernetes集群。

启动虚拟机

首先,通过下面命令克隆并进入项目:

git clone https://github.com/choerodon/kubeadm-ansible.git && cd kubeadm-ansible

通过 Virtualbox + Vagrant启动三台CentOS系统虚拟机,在项目根目录中有编写好的Vagrantfile文件,直接使用就可以了。

Vagrantfile文件如下:

Vagrant.configure(2) do |config|

(1..3).each do |i|
config.vm.define "node#{i}" do |s|
s.vm.box = "bento/centos-7.3"
s.vm.box_url = "http://file.choerodon.com.cn/vagrant/box/bento_centos-7.3.box"
s.vm.hostname = "node#{i}"
n = 10 + i
s.vm.network "private_network", ip: "192.168.56.#{n}"
s.vm.provider "virtualbox" do |v|
v.cpus = 2
v.memory = 4096
end
end
end
end

其中box_url指定box镜像下载地址,hostname指虚拟机主机名,private_network指内网ip地址,cpus和memory指虚拟机的硬件资源要求。

vagrant-cachier插件用于不同虚拟机中共享公共包缓存,减少虚拟机的包下载时间。 根据上述Vagrantfile文件启动的虚拟机相关信息如下:

Hostname CPU Memory IP System
node1 2 4G 192.168.56.11 CentOS 7.3
node2 2 4G 192.168.56.12 CentOS 7.3
node3 2 4G 192.168.56.13 CentOS 7.3

在项目根目录中执行下面命令启动虚拟机:

启动前请确认主机已开启CPU虚拟化支持。

vagrant up

登录虚拟机node1

vagrant ssh node1

部署Kubernetes

在node1中部署Ansible所需的环境

sudo yum install -y epel-release && \
sudo yum install -y \
ansible \
git \
httpd-tools \
pyOpenSSL \
python-cryptography \
python-lxml \
python-netaddr \
python-passlib \
python-pip

在node1中再次克隆项目代码(防止换行符改变导致后期部署出错)

git clone https://github.com/choerodon/kubeadm-ansible.git && cd kubeadm-ansible

在node1中编辑项目下的kubeadm-ansible/inventory/hosts文件,修改各机器的访问地址、用户名、密码,并维护好各节点与角色的关系,前面的名称为机器的hostname。该用户必须是具有root权限的用户,但并非要求一定是root用户,其他具有root权限的用户也可以。比如,想要部署单master节点集群,只需要这样配置(参考):

*在all分区中每一行为一个节点的信息,node1为该节点的hostname,ansible_host指节点内网IP,ip指Kubernetes目标绑定网卡IP,ansible_user为该节点具有管理员权限的一个用户,ansible_ssh_pass为该用户的密码,ansible_become代表执行命令时使用管理员权限。

其中Kube-Master节点为Kubernetes主节点、Kube-Node节点为Kubernetes普通节点、Etcd节点为将部署Etcd的节点,按本教程安装Kube-Master节点与Etcd节点必须一致,Etcd官方建议Etcd集群节点个数为奇数个(比如1、3、5)以防止脑裂。

[all]
node1 ansible_host=192.168.56.11 ip=192.168.56.11 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node2 ansible_host=192.168.56.12 ip=192.168.56.12 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node3 ansible_host=192.168.56.13 ip=192.168.56.13 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
[kube-master]
node1
[etcd]
node1
[kube-node]
node1
node2
node3

*在项目下的kubeadm-ansible/inventory/hosts文件默认配置的是3个master节点集群。

在node1中执行下面命令部署集群:

ansible-playbook -i inventory/hosts -e @inventory/vars cluster.yml

在cluster.yml中我们将集群的安装划分为6个阶段,分别为:

  • 安装预备

    • 安装前检查:检查系统,确认Yum库,下载cfssl。
    • Docker相关检查:检查Docker Engine,Configuration,Proxy。
  • Etcd安装
    • 生成Etcd证书
    • 安装Docker
    • 配置系统环境
  • kube-master:kube-node必须组件安装
    • kubelet
  • kube-master安装
    • 检查kubeadm
    • 生成证书
    • 修改配置
  • kube-node安装
    • 生成配置文件
    • kubeadm join
  • 其他组件安装
    • 配置flannel网络
    • 安装ingress-nginx
    • 安装dashboard
    • 安装heapster
    • 安装kube-lego

至此,集群部署到此结束,可以执行下面命令查看pod状态,都为Running状态则部署成功:

kubectl get po -n kube-system

如果部署失败,想要重置集群(所有数据),执行:

ansible-playbook -i inventory/hosts reset.yml

添加节点

如果想再添加一个节点,进入已有集群当中可以按下面步骤进行: 编辑kubeadm-ansible/inventory/hosts,将新节点信息添加进去。比如新节点hostname为node4,ip为192.168.56.14,其余信息与其他节点相同,那么进行如下添加信息:

[all]
node1 ansible_host=192.168.56.11 ip=192.168.56.11 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node2 ansible_host=192.168.56.12 ip=192.168.56.12 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node3 ansible_host=192.168.56.13 ip=192.168.56.13 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node4 ansible_host=192.168.56.14 ip=192.168.56.14 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
[kube-master]
node1
[etcd]
node1
[kube-node]
node1
node2
node3
node4

节点信息添加完成后,就可以进行节点添加操作了:

ansible-playbook -i inventory/hosts -e @inventory/vars scale.yml

添加完成后查看节点信息:

kubectl get node

集群部署的介绍就到此结束了,下一篇我们将为大家介绍如何搭建第一个应用程序。


本文由猪齿鱼技术团队原创,转载请注明出处

从0到1使用Kubernetes系列(三):使用Ansible安装Kubernetes集群的更多相关文章

  1. Kubernetes系列三:二进制安装Kubernetes环境

    安装环境: # 三个节点信息 192.168.31.11 主机名:env11 角色:部署Master节点/Node节点/ETCD节点 192.168.31.12 主机名:env12 角色:部署Node ...

  2. kubernetes系列(十七) - 通过helm安装dashboard详细教程

    1. 前提条件 2. 配置https证书为secret 3. dashboard安装 3.1 helm拉取dashboard的chart 3.2 配置dashboard的chart包配置 3.3 he ...

  3. Kubernetes实战指南(三十四): 高可用安装K8s集群1.20.x

    @ 目录 1. 安装说明 2. 节点规划 3. 基本配置 4. 内核配置 5. 基本组件安装 6. 高可用组件安装 7. 集群初始化 8. 高可用Master 9. 添加Node节点 10. Cali ...

  4. mongo 3.4分片集群系列之二:搭建分片集群--哈希分片

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  5. spring cloud系列教程第六篇-Eureka集群版

    spring cloud系列教程第六篇-Eureka集群版 本文主要内容: 本文来源:本文由凯哥Java(kaigejava)发布在博客园博客的.转载请注明 1:Eureka执行步骤理解 2:集群原理 ...

  6. Kubernetes全栈架构师(Kubeadm高可用安装k8s集群)--学习笔记

    目录 k8s高可用架构解析 Kubeadm基本环境配置 Kubeadm系统及内核升级 Kubeadm基本组件安装 Kubeadm高可用组件安装 Kubeadm集群初始化 高可用Master及Token ...

  7. k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-2

    三.ETCD集群部署 类似于走zookeeper集群分布式协调服务,可做以key v形式存储在ETCD中. 官方链接:https://github.com/coreos/etcd 分布式kv存储,为分 ...

  8. centos7.0 安装redis集群

    生产环境下redis基本上都是用的集群,毕竟单机版随时都可能挂掉,风险太大.这里我就来搭建一个基本的redis集群,功能够用但是还需要完善,当然如果有钱可以去阿里云买云数据库Redis版的,那个还是很 ...

  9. 使用kubeadm安装k8s集群故障处理三则

    最近在作安装k8s集群,测试了几种方法,最终觉得用kubeadm应该最规范. 限于公司特别的网络情况,其安装比网上不能访问google的情况还要艰难. 慢慢积累经验吧. 今天遇到的三则故障记下来作参考 ...

随机推荐

  1. ubuntu软件工具推荐

    时间:2019-04-11 记录:PangYuaner 标题:串口调试利器--Minicom配置及使用详解 地址:https://www.cnblogs.com/wonux/p/5897127.htm ...

  2. Vulnhub靶机渗透 -- DC5

    信息收集 通过nmap搜索到IP为:192.168.200.11 开启了80http.111RPC服务端口 先打开网页,然后进行目录爆破 contact.php 攻击 经搜索没有发现可以攻击wheel ...

  3. Linux centos7 nginx 平滑升级

    2021-08-19为了方便读者的阅读,该文通篇使用绝对路径,各位朋友们在实际上操作中可以根据实际情况编写路径(#^.^#)1. 当前环境 # system cat /etc/redhat-relea ...

  4. Python实现Thrift Server

    近期在项目中存在跨编程语言协作的需求,使用到了Thrift.本文将记录用python实现Thrift服务端的方法. 环境准备 根据自身实际情况下载对应的Thrift编译器,比如我在Windows系统上 ...

  5. SQL-DELETE触发器练习

    &练习一 如下所示三张表( student,grade,student_updata_before ): student表 grade表 Student_update_before表 # 触发 ...

  6. Linux残留的EFI启动项删除后又恢复的问题

    电脑Windows + Fedora双系统,UEFI启动,共用同一个EFI分区.现在删除了Fedora系统,那么应该将EFI分区中的Fedora启动项也删除之. 按照网上的办法,在Windows上,尝 ...

  7. IDEA创建Maven项目做Java Web时无WEB-INF/classes的问题

    昨天开始学习Java Web中的Servlet,学到用IntelliJ IDEA创建Java Web项目时,跟着课程上老师的步骤一步步做,却发现运行时Servlet找不到.坑爹的是,练习建项目时,一模 ...

  8. TCL、华星光电和中环股份,如何在一条生态链上领跑?

    聚众智.汇众力.采众长. "我们决心用五年时间,将TCL科技和TCL实业做到真正的世界500强,将智能终端.半导体显示.半导体光伏三大核心产业力争做到全球领先,将半导体材料等其他产业做到中国 ...

  9. java基础语法以及进制的转换

    关键字 关键字: 被Java语言赋予特定含义的单词 关键字特点 组成关键字的字母全部小写 关键字注意事项 goto和const作为保留字存在,目前并不使用 类似IDEA这样的集成工具,针对关键字有特殊 ...

  10. Vue开发多人聊天室 复盘总结

    前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...