一、利用ansible部署kubernetes准备:
集群介绍
本系列文档致力于提供快速部署高可用k8s集群的工具,并且也努力成为k8s实践、使用的参考书;基于二进制方式部署和利用ansible-playbook实现自动化:既提供一键安装脚本,也可以分步执行安装各个组件,同时讲解每一步主要参数配置和注意事项;二进制方式部署有助于理解系统各组件的交互原理和熟悉组件启动参数,有助于快速排查解决实际问题。
版本组件
kubernetes v1.9.7
etcd v3.3.4
docker 18.03.0-ce
calico/node:v3.0.6
calico/cni:v2.0.5
calico/kube-controllers:v2.0.4
centos 7.3+
 
集群规划和基础参数设定
  1. 1、高可用集群所需节点配置如下:

  • 部署节点 x1 : 运行这份 ansible 脚本的节点  # 部署节点:运行ansible 脚本的节点
  • etcd节点 x3 : 注意etcd集群必须是1,3,5,7...奇数个节点
  • master节点 x1 : 运行集群主要组件
  • node节点 x3 : 真正应用部署的节点,根据需要增加机器配置和节点数
  1. 2、在部署节点准备ansible:使用ansible的doker环境启动

(1)下载内部源配置脚本

 

(2)下载并安装docker

ls
tar zxvf docker.tar.gz
ls
cd docker/
ls
sh docker.sh
systemctl status docker
docker images
 

(3)下载并运行docker版ansible

docker run -itd -v /etc/ansible:/etc/ansible -v /etc/kubernetes/:/etc/kubernetes/ -v /root/.kube:/root/.kube -v /usr/local/bin/:/usr/local/bin/ 1acb4fd5df5b  /bin/sh
 

(4)配置每台机器之间主机名解析以及免密钥登陆

 
配置免密登录
#ssh-keygen  回车 回车 回车
#ssh-copy-id $Ips   #$IPs为所有节点地址包括自身,按照提示输入yes 和root密码

(5)下载安装kubernetes

 
 
 
 
 
 
 
 
解压 二进制文件包:k8s197.tar.gz,之后将解压后的 bin 目录下的所有二进制文件 mv 到 /etc/ansible/bin/下
 
解压后会产生一个bin目录,该目录为docker和kubernetes的环境目录,如果该目录下的文件无法共享到集群中的节点,docker与kubectl命令不可用
 
 
 
将example目录中的模板文件导出,复制到/etc/ansible目录下,并改名为hosts
 
 
[deploy]
192.168.254.20 # etcd集群请提供如下NODE_NAME、NODE_IP变量,请注意etcd集群必须是1,,,...奇数个节点
[etcd]
192.168.254.21 NODE_NAME=etcd1 NODE_IP="192.168.254.21"
192.168.254.22 NODE_NAME=etcd2 NODE_IP="192.168.254.22"
192.168.254.23 NODE_NAME=etcd3 NODE_IP="192.168.254.23" [kube-master]
192.168..254.21 NODE_IP="192.168..254.21" [kube-node]
192.168.254.21 NODE_IP="192.168.254.21"
192.168.254.22 NODE_IP="192.168.254.22"
192.168.254.23 NODE_IP="192.168.254.23" [all:vars]
# ---------集群主要参数---------------
#集群部署模式:allinone, single-master, multi-master
DEPLOY_MODE=single-master #集群 MASTER IP
MASTER_IP="192.168.254.21" #集群 APISERVER
KUBE_APISERVER="https://192.168.254.21:6443" #TLS Bootstrapping 使用的 Token,使用 head -c /dev/urandom | od -An -t x | tr -d ' ' 生成
BOOTSTRAP_TOKEN="d18f94b5fa585c7123f56803d925d2e7" # 集群网络插件,目前支持calico和flannel calico工作在第三层 flannel工作在第二层
CLUSTER_NETWORK="calico" # 部分calico相关配置,更全配置可以去roles/calico/templates/calico.yaml.j2自定义
# 设置 CALICO_IPV4POOL_IPIP=“off”,可以提高网络性能,条件限制详见 .安装calico网络组件.md
CALICO_IPV4POOL_IPIP="always"
# 设置 calico-node使用的host IP,bgp邻居通过该地址建立,可手动指定端口"interface=eth0"或使用如下自动发现
IP_AUTODETECTION_METHOD="can-reach=223.5.5.5" # 部分flannel配置,详见roles/flannel/templates/kube-flannel.yaml.j2
FLANNEL_BACKEND="vxlan" # 服务网段 (Service CIDR),部署前路由不可达,部署后集群内使用 IP:Port 可达
SERVICE_CIDR="10.68.0.0/16" # POD 网段 (Cluster CIDR),部署前路由不可达,**部署后**路由可达
CLUSTER_CIDR="172.20.0.0/16" # 服务端口范围 (NodePort Range)
NODE_PORT_RANGE="20000-40000" # kubernetes 服务 IP (预分配,一般是 SERVICE_CIDR 中第一个IP)
CLUSTER_KUBERNETES_SVC_IP="10.68.0.1" # 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
CLUSTER_DNS_SVC_IP="10.68.0.2" # 集群 DNS 域名
CLUSTER_DNS_DOMAIN="cluster.local." # etcd 集群间通信的IP和端口, **根据实际 etcd 集群成员设置**
ETCD_NODES="etcd1=https://192.168.254.21:2380,etcd2=https://192.168.254.22:2380,etcd3=https://192.168.254.23:2380" # etcd 集群服务地址列表, **根据实际 etcd 集群成员设置**
ETCD_ENDPOINTS="https://192.168.254.21:2379,https://192.168.254.22:2379,https://192.168.254.23:2379" # 集群basic auth 使用的用户名和密码
BASIC_AUTH_USER="admin"
BASIC_AUTH_PASS="admin" # ---------附加参数--------------------
#默认二进制文件目录
bin_dir="/usr/local/bin" #证书目录
ca_dir="/etc/kubernetes/ssl" #部署目录,即 ansible 工作目录
base_dir="/etc/ansible"
 
 
#ssh-keygen  回车 回车 回车
#ssh-copy-id $Ips   #$IPs为所有节点地址包括自身,按照提示输入yes 和root密码
测试各节点是否正常
 
1、
  • 创建CA证书和环境配置
  • 主要完成CA证书创建、分发、环境变量。
  • kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用 CloudFlare 的  PKI 工具集生成自签名的CA证书,用来签名后续创建的其它 TLS 证书。
 
2、安装etcd集群
3、安装docker服务
4、

安装kube-master节点
部署master节点包含三个组件`apiserver` `scheduler` `controller-manager`,其中:
apiserver:提供集群管理的REST API接口,包括认证授权、数据校验以及集群状态变更等
  • 只有API Server才直接操作etcd
  • 其他模块通过API Server查询或修改数据
  • 提供其他模块之间的数据交互和通信的枢纽
scheduler:负责分配调度Pod到集群内的node节点
  • 监听kube-apiserver,查询还未分配Node的Pod
  • 根据调度策略为这些Pod分配节点
controller-manager:由一系列的控制器组成,它通过apiserver监控整个集群的状态,并确保集群处于预期的工状态
#ansible-playbook 04.kube-master.yml
 
5、
安装kube-node节点
node 是集群中承载应用的节点,前置条件需要先部署好master节点(因为需要操作用户角色绑定、批准kubelet TLS 证书请求等),它需要部署如下组件:
  • docker:运行容器
  • calico: 配置容器网络
  • kubelet: node上最主要的组件
  • kube-proxy: 发布应用服务与负载均衡
6、安装网络
 
将镜像文件拷贝到各个节点,并运行容器
 
 
 
 

测试:

 
 
验证calico网络
 

部署coredns服务

(1)进入/etc/ansible/manifests 目录:
 
(2)进入coredns工作目录,并创建pod:
 
 
验证coredns:
在集群中任意节点都能ping通pod服务IP
 
部署dashboard
(1)进入dashboard工作目录,并创建pod:
 
 

(2)验证dashboard:
 
(3)查看 dashboard 服务端点,并登陆:
 
 
将dashboard 服务端点复制到浏览器并打开(用户名/密码:admin/admin)
 
需要输入 Token 方可登陆,获取 Token:
#kubectl -n kube-system describe secret $(kubectl -n kube-system get secret|grep admin-user|awk '{print $1}')
 
 
登陆成功:
 
部署heapster监控
(1)进入heapster工作目录,并创建pod:
(2)验证监控:
 

yaml文件

 vim 01.prepare.yml
 
# 在deploy节点生成CA相关证书,以及kubedns.yaml配置文件
- hosts: deploy
roles:
- deploy # 集群节点的公共配置任务
- hosts:
- kube-master
- kube-node
- deploy
- etcd
- lb
roles:
- prepare # [可选]多master部署时的负载均衡配置
- hosts: lb
roles:
- lb
 vim  02.etcd.yml
- hosts: etcd
roles:
- etcd

vim 03.docker.yml

- hosts:
- kube-master
- kube-node
roles:
- docker

vim 04.kube-master.yml

- hosts: kube-master
roles:
- kube-master
- kube-node
# 禁止业务 pod调度到 master节点
tasks:
- name: 禁止业务 pod调度到 master节点
shell: "{{ bin_dir }}/kubectl cordon {{ NODE_IP }} "
when: DEPLOY_MODE != "allinone"
ignore_errors: true

vim 05.kube-node.yml

- hosts: kube-node
roles:
- kube-node

vim 06.network.yml

# 集群网络插件部署,只能选择一种安装
- hosts:
- kube-master
- kube-node
roles:
- { role: calico, when: "CLUSTER_NETWORK == 'calico'" }
- { role: flannel, when: "CLUSTER_NETWORK == 'flannel'" }
 
 
vim main.yml
- name: 创建calico 相关目录
file: name={{ item }} state=directory
with_items:
- /etc/calico/ssl
- /opt/kube/kube-system/calico - name: 复制CA 证书到calico 证书目录
copy: src={{ ca_dir }}/ca.pem dest=/etc/calico/ssl/ca.pem - name: 创建calico 证书请求
template: src=calico-csr.json.j2 dest=/etc/calico/ssl/calico-csr.json - name: 创建 calico证书和私钥
shell: "cd /etc/calico/ssl && {{ bin_dir }}/cfssl gencert \
-ca={{ ca_dir }}/ca.pem \
-ca-key={{ ca_dir }}/ca-key.pem \
-config={{ ca_dir }}/ca-config.json \
-profile=kubernetes calico-csr.json | {{ bin_dir }}/cfssljson -bare calico" # 因官方calico.yaml文件中使用特定的证书名,所以要重命名
- name: 重命名相关证书
shell: "cd /etc/calico/ssl && cp ca.pem etcd-ca && cp calico.pem etcd-cert && cp calico-key.pem etcd-key" - name: 准备 calico DaemonSet yaml文件
template: src=calico.yaml.j2 dest=/opt/kube/kube-system/calico/calico.yaml

具体的ansible文件配置,见百度网盘kubernetes.tar.gz

第3篇K8S集群部署的更多相关文章

  1. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  2. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  3. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  6. (视频)asp.net core系列之k8s集群部署视频

    0.前言 应许多网友的要求,特此录制一下k8s集群部署的视频.在录制完成后发现视频的声音存在一点瑕疵,不过不影响大家的观感. 一.视频说明 1.视频地址: 如果有不懂,或者有疑问的欢迎留言.视频分为两 ...

  7. 在k8s集群部署SonarQube

    目录 1.2.存储环境 1.3.sonarqube版本 2.部署sonarqube 2.1.部署PostgreSQL 2.2.部署SonarQube 2.3.访问检查 SonarQube 是一款用于代 ...

  8. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  9. 基于k8s集群部署prometheus监控etcd

    目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...

随机推荐

  1. 力扣—climbing stairs(爬楼梯) python实现

    题目描述: 中文: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 英文: You are cl ...

  2. php导出xls,报错:文件格式和扩展名不匹配。该文件可能已损坏或不安全。除非你相信它的来源,否则不要打开它。

    打开文件报错如下 在文件头加上如下代码 ob_end_clean(); header('Content-Type:application/vnd.ms-excel'); header('Cache-C ...

  3. vue 前后端数据交互问题解决

    先在vue项目中配置好路由组件路由 然后写相应组件 2 后端 写接口赔路由 第三  解决跨域问题 处理数据交互 这样前端就拿到了数据

  4. c#处理3种json数据的方式

    原文出处:http://www.jb51.net/article/48027.htm 一.C#处理简单json数据 json数据: {"result":"0", ...

  5. BZOJ 2301 莫比乌斯反演入门

    2301: [HAOI2011]Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函 ...

  6. Echarts 甘特图教程

    Echarts甘特图教程  echarts官网实例: https://gallery.echartsjs.com/editor.html?c=xEYpsVs30s 效果:  代码: <html& ...

  7. AcWing 224. 计算器 (BSGS算法)打卡

    题目:https://www.acwing.com/problem/content/226/ 题意:有一个计算器能完成三种功能 1.给定Y,Z,P,计算YZModPYZModP 的值: 2.给定Y,Z ...

  8. MySQL 关于case when结合group by用时的写法举例

    原表是个员工档案,共583人,但case when结合group by用时,写法不同,其出来的结果也不同 例1: select distinct a.Branch,case when kultur = ...

  9. stc单片机笔记

    volatile是一个类型修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 简单地说就是防止编译器对代码进行优 ...

  10. vue绑值(表格)

    vue绑值(表格) <!DOCTYPE html> <html lang="zh-CN"> <head> <title>JSON取数 ...