一、利用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. SET TRANSACTION - 设置当前事务的特性

    SYNOPSIS SET TRANSACTION [ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ] [ READ WRITE | READ O ...

  2. linux100day(day7)--用户管理和权限管理简单介绍

    系统基础 计算机的三大部件 CPU 内存 IO 总线 一般使用system call和api来调用硬件 一些基础命令, pwd 查看当前路径 cal 计算器 clock 时钟 hwclock 显示与设 ...

  3. 20.ReenterLock重入锁

    import java.util.concurrent.locks.ReentrantLock; /** * 重入锁 ReenterLock 一个线程允许连续获得同一把锁,注意:必须释放相同次数,释放 ...

  4. 玩玩Mybatis的逆向工程

    通过数据库 逆向生成代码 主要配置的文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...

  5. zookeeper问题排查

    一.无法启动 zookeeper之前可以很好的运行,由于zk集群不是正常的关闭,比如 强制Linux关闭,直接执行kill 命令zk的进程等原因导致zookeeper启动不了 启动命令后,查看状态,会 ...

  6. Java中的小知识。

    package jicheng; public class Animal { //定义一个成员变量name. private String name; public String getName() ...

  7. [CSP-S模拟测试]:抛硬币(DP)

    题目背景 小$A$和小$B$是一对好朋友,他们经常一起愉快的玩耍.最近小$B$沉迷于**师手游,天天刷本,根本无心搞学习.但是小$B$已经入坑了几个月,却一次都没有抽到$SSR$,让他非常怀疑人生.勤 ...

  8. 项目质量管理—七种基本质量工具

    出处:PMBOK(第五版) P236 1.因果图,又称鱼骨图或石川图 用来追溯问题来源,回推到可行动的根本原因.(找根本原因) 2.流程图,也称过程图 用来显示在一个或多个输入转化成一个或多个输出的过 ...

  9. 探索Redis设计与实现8:连接底层与表面的数据结构robj

    本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...

  10. Android程序中欢迎界面

    额,在做项目中,肯定首先要用到欢迎界面,下面是我在做项目中用的最简单的一个欢迎界面,即打开程序时,先是显示一张图片,然后等一段时间后图片消失,进入登录界面.直接上代码,有注释也不用解释了: 首先是We ...