kubespray容器化部署kubernetes高可用集群

一、基础环境

  • docker版本1.12.6
  • CentOS 7

1.准备好要部署的机器

IP ROLE
172.30.33.89 k8s-registry-lb
172.30.33.90 k8s-master01-etcd01
172.30.33.91 k8s-master02-etcd02
172.30.33.92 k8s-master03-etcd03
172.30.33.93 k8s-node01-ingress01
172.30.33.94 k8s-node02-ingress02
172.30.33.31 ansible-client

2.准备部署机器 ansible-client

3.准备所需要镜像,由于被墙,所需镜像可以在百度云去下载,点击这里

IMAGE VERSION
quay.io/coreos/hyperkube v1.6.7_coreos.0
quay.io/coreos/etcd v3.1.10
calico/ctl v1.1.3
calico/node v2.4.1
calico/cni v1.10.0
calico/kube-policy-controller v0.7.0
quay.io/calico/routereflector v0.3.0
gcr.io/google_containers/kubernetes-dashboard-amd64 v1.6.3
gcr.io/google_containers/nginx-ingress-controller 0.9.0-beta.11
gcr.io/google_containers/defaultbackend 1.3
gcr.io/google_containers/cluster-proportional-autoscaler-amd64 1.1.1
gcr.io/google_containers/fluentd-elasticsearch 1.22
gcr.io/google_containers/kibana v4.6.1
gcr.io/google_containers/elasticsearch v2.4.1
gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.4
gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.4
gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.4
andyshinn/dnsmasq 2.72
nginx 1.11.4-alpine
gcr.io/google_containers/heapster-grafana-amd64 v4.4.1
gcr.io/google_containers/heapster-amd64 v1.4.0
gcr.io/google_containers/heapster-influxdb-amd64 v1.1.1
gcr.io/google_containers/pause-amd64 3.0
lachlanevenson/k8s-helm v2.2.2
gcr.io/kubernetes-helm/tiller v2.2.2

4.load所有下载的镜像

# 在ansible-client上操作
$ IP=(172.30.33.89 172.30.33.90 172.30.33.91 172.30.33.92 172.30.33.93 172.30.33.94)
$ for i in ${IP[*]}; do scp -r kubespray_images_v1.6.7 $i:~/; done
# 对所有要部署的节点操作
$ IMAGES=$(ls -l ~/kubespray_images_v1.6.7|awk -F‘ ‘ ‘{ print $9 }‘)
$ for x in ${images[*]}; do docker load -i kubespray_images_v1.6.7/$x; done

二、搭建集群

1.获取kubespray源码

$ git clone https://github.com/kubernetes-incubator/kubespray.git

2.编辑配置文件

$ vim ~/kubespray/inventory/group_vars/k8s-cluster.yml

---
# 启动集群的基础系统,支持ubuntu, coreos, centos, none
bootstrap_os: centos

# etcd数据存放位置
etcd_data_dir: /var/lib/etcd

# kubernetes所需二进制文件将要安装的位置
bin_dir: /usr/local/bin

# kubrnetes配置文件存放目录
kube_config_dir: /etc/kubernetes
# 生成证书和token的脚本的存放位置
kube_script_dir: "{ { bin_dir } }/kubernetes-scripts"
# kubernetes manifest文件存放目录
kube_manifest_dir: "{ { kube_config_dir } }/manifests"
# kubernetes 命名空间
system_namespace: kube-system

# 日志存放位置
kube_log_dir: "/var/log/kubernetes"

# kubernetes证书存放位置
kube_cert_dir: "{ { kube_config_dir } }/ssl"

# kubernetes token存放位置
kube_token_dir: "{ { kube_config_dir } }/tokens"

# basic auth 认证文件存放位置
kube_users_dir: "{ { kube_config_dir } }/users"

# 关闭匿名授权
kube_api_anonymous_auth: false

## kubernetes使用版本
kube_version: v1.6.7

# 安装过程中缓存文件下载位置(最少1G)
local_release_dir: "/tmp/releases"
# 重试次数,比如下载失败等情况
retry_stagger: 5

# 证书组
kube_cert_group: kube-cert

# 集群日志等级
kube_log_level: 2

# HTTP下api server的basic auth认证用户名密码
kube_api_pwd: "test123"
kube_users:
  kube:
    pass: "{ {kube_api_pwd} }"
    role: admin
  root:
    pass: "{ {kube_api_pwd} }"
    role: admin

## 开关认证 (basic auth, static token auth)
#kube_oidc_auth: false
#kube_basic_auth: false
#kube_token_auth: false

## Variables for OpenID Connect Configuration https://kubernetes.io/docs/admin/authentication/
## To use OpenID you have to deploy additional an OpenID Provider (e.g Dex, Keycloak, ...)

# kube_oidc_url: https:// ...
# kube_oidc_client_id: kubernetes
## Optional settings for OIDC
# kube_oidc_ca_file: { { kube_cert_dir } }/ca.pem
# kube_oidc_username_claim: sub
# kube_oidc_groups_claim: groups

# 网络插件 (calico, weave or flannel)
kube_network_plugin: calico

# 开启 kubernetes network policies
enable_network_policy: false

# Kubernetes 服务的地址范围.
kube_service_addresses: 10.233.0.0/18

# pod 地址范围
kube_pods_subnet: 10.233.64.0/18

# 网络节点大小分配
kube_network_node_prefix: 24

# api server 监听地址及端口
kube_apiserver_ip: "{ { kube_service_addresses|ipaddr(‘net‘)|ipaddr(1)|ipaddr(‘address‘) } }"
kube_apiserver_port: 6443 # (https)
kube_apiserver_insecure_port: 8080 # (http)

# 默认dns后缀
cluster_name: cluster.local
# 为使用主机网络的pods使用/etc/resolv.conf解析DNS的子域
ndots: 2
# DNS 组件dnsmasq_kubedns/kubedns
dns_mode: dnsmasq_kubedns
# dns模式,可以是 docker_dns, host_resolvconf or none
resolvconf_mode: docker_dns
# 部署netchecker来检测DNS和HTTP状态
deploy_netchecker: false
# skydns service IP配置
skydns_server: "{ { kube_service_addresses|ipaddr(‘net‘)|ipaddr(3)|ipaddr(‘address‘) } }"
dns_server: "{ { kube_service_addresses|ipaddr(‘net‘)|ipaddr(2)|ipaddr(‘address‘) } }"
dns_domain: "{ { cluster_name } }"

# docker 存储目录
docker_daemon_graph: "/var/lib/docker"

## A string of extra options to pass to the docker daemon.
## This string should be exactly as you wish it to appear.
## An obvious use case is allowing insecure-registry access
## to self hosted registries like so:
docker_options: "--insecure-registry={ { kube_service_addresses } } --graph={ { docker_daemon_graph } } --iptables=false --storage-driver=devicemapper"
docker_bin_dir: "/usr/bin"

# 组件部署方式
# Settings for containerized control plane (etcd/kubelet/secrets)
etcd_deployment_type: docker
kubelet_deployment_type: docker
cert_management: script
vault_deployment_type: docker

# K8s image pull policy (imagePullPolicy)
k8s_image_pull_policy: IfNotPresent

# Monitoring apps for k8s
efk_enabled: true

# Helm deployment
helm_enabled: false

3.生成集群配置

配置完基本集群参数后,还需要生成一个集群配置文件,用于指定需要在哪几台服务器安装,和指定 master、node 节点分布,以及 etcd 集群等安装在那几台机器上。

# 定义集群IP
$ IP=(172.30.33.89 172.30.33.90 172.30.33.91 172.30.33.92 172.30.33.93 172.30.33.94)
# 利用kubespray自带的python脚本生成配置
$ CONFIG_FILE=~/kubespray/inventory/inventory.cfg python3 ~/kubespray/contrib/inventory_builder/inventory.py ${ IP[*] }

生成的配置如下,最好是在配置上加上ansible_user=root,我最开始在搭建的时候没有指定,报错了

node1    ansible_user=root ansible_host=172.30.33.90 ip=172.30.33.90
node2    ansible_user=root ansible_host=172.30.33.91 ip=172.30.33.91
node3    ansible_user=root ansible_host=172.30.33.92 ip=172.30.33.92
node4    ansible_user=root ansible_host=172.30.33.93 ip=172.30.33.93
node5    ansible_user=root ansible_host=172.30.33.94 ip=172.30.33.94

[kube-master]
node1
node2
node3

[kube-node]
node1
node2
node3
node4
node5

[etcd]
node1
node2
node3

[k8s-cluster:children]
kube-node
kube-master

[calico-rr]

5.docker,efk,etcd配置修改

提前修改ansbile中有关docker,efk,etcd的配置,因为后面在部署的过程中,ansible会检测docker的版本并下载最新的版本,但是由于墙的原因,导致无法下载,会一直卡在下载的地方,所以这里,我们要提前修改,同时需要升级etcd的版本,默认的3.0.6的版本,存在不稳定因素。

修改docker配置,将下面关于docker安装的部分全部注释掉

vim ~/kubespray/roles/docker/tasks/main.yml

# - name: ensure docker repository public key is installed
#  action: "{ { docker_repo_key_info.pkg_key } }"
#  args:
#    id: "{ {item} }"
#    keyserver: "{ {docker_repo_key_info.keyserver} }"
#    state: present
#  register: keyserver_task_result
#  until: keyserver_task_result|succeeded
#  retries: 4
#  delay: "{ { retry_stagger | random + 3 } }"
#  with_items: "{ { docker_repo_key_info.repo_keys } }"
#  when: not (ansible_os_family in ["CoreOS", "Container Linux by CoreOS"] or is_atomic)

# - name: ensure docker repository is enabled
#  action: "{ { docker_repo_info.pkg_repo } }"
#  args:
#    repo: "{ {item} }"
#    state: present
#  with_items: "{ { docker_repo_info.repos } }"
#  when: not (ansible_os_family in ["CoreOS", "Container Linux by CoreOS"] or is_atomic) and (docker_repo_info.repos|length > 0)

# - name: Configure docker repository on RedHat/CentOS
#  template:
#    src: "rh_docker.repo.j2"
#    dest: "/etc/yum.repos.d/docker.repo"
#  when: ansible_distribution in ["CentOS","RedHat"] and not is_atomic

# - name: ensure docker packages are installed
#  action: "{ { docker_package_info.pkg_mgr } }"
#  args:
#    pkg: "{ {item.name} }"
#    force: "{ {item.force|default(omit)} }"
#    state: present
#  register: docker_task_result
#  until: docker_task_result|succeeded
#  retries: 4
#  delay: "{ { retry_stagger | random + 3 } }"
#  with_items: "{ { docker_package_info.pkgs } }"
#  notify: restart docker
#  when: not (ansible_os_family in ["CoreOS", "Container Linux by CoreOS"] or is_atomic) and (docker_package_info.pkgs|length > 0)

# 如果你是自己安装的docker,记得将这段注释掉,除非你觉得template中的docker.service你能用
#- name: Set docker systemd config
#  include: systemd.yml

修改efk配置,注释掉KIBANA_BASE_URL这段,否则后面你搭建efk之后,无法访问kibana

vim ~/kubespray/roles/kubernetes-apps/efk/kibana/templates/kibana-deployment.yml.j2

#          - name: "KIBANA_BASE_URL"
#            value: "{ { kibana_base_url } }"

修改download配置,更改etcd和kubedns版本

1.6.7版本中,为了使用更高版本的calico node,我自己多添加了一个变量calico_node_version

vim ~/kubespray/roles/download/defaults/main.yml
etcd_version: v3.1.10
calico_node_version: "v2.4.1"
kubedns_version: 1.14.4
calico_policy_version: "v0.7.0"

注意: 如果你修改了kubedns_version版本,那么也需要修改/root/kubespray/roles/kubernetes-apps/ansible/defaults/main.yml文件中的kubedns_version版本

(可选)6.修改docker.service

# 如果你的docker.service中没有MountFlags则不需要这一步
# 注释掉/usr/lib/systemd/system/docker.service 中的MountFlags=slave

7.在ansible-client上一键部署

$ ansible-playbook -i ~/kubespray/inventory/inventory.cfg cluster.yml -b -v --private-key=~/.ssh/id_rsa

部署成功后如下 相关node信息 相关pod信息 

参考:

https://kevinguo.me/2017/07/06/kubespray-deploy-kubernetes-1/#1%E5%87%86%E5%A4%87%E5%A5%BD%E8%A6%81%E9%83%A8%E7%BD%B2%E7%9A%84%E6%9C%BA%E5%99%A8

原文地址:https://www.cnblogs.com/kevinX/p/8276238.html

时间: 2024-11-05 22:52:49

kubespray容器化部署kubernetes高可用集群的相关文章

容器化部署Cassandra高可用集群

前提: 三台装有docker的虚拟机,这里用VM1,VM2,VM3表达(当然生产环境要用三个独立物理机,否则无高可用可言),装docker可参见Ubuntu离线安装docker. 开始部署: 部署图 如上图所示,三台VM的IP分别为: 192.168.0.101 192.168.0.102 192.168.0.103 客户端将使用这三个IP来连接集群,每个VM通过端口映射由docker网桥myBridge来与Cassandra容器通信,容器的IP会在启动容器时指定 部署步骤: 1. 建docke

(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https://blog.csdn.net/qq_28804275/article/details/80938659 下载redis镜像(不带tag标签则表示下载latest版本) docker pull redis 从github 下载最新的redis.conf,注意重要参数 # 端口 port 6379 #

部署 Zookeeper 高可用集群

一.Zookeeper原理简介ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. Zookeeper设计目的最终一致性:client不论连接到那个Server,展示给它的都是同一个视图.可靠性:具有简单.健壮.良好的性能.如果消息m被到一台服务器接收,那么消息m将被所有服务器接收.实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息.但由于网络延时等原因,Z

超简单kubernetes 高可用集群版安装

前置条件 系统要求:64位centos7.6 关闭防火墙和selinux 关闭操作系统swap分区(使用k8s不推荐打开) 请预配置好每个节点的hostname保证不重名即可 请配置第一个master能秘钥免密登入所有节点(包括自身) 环境说明 本手册安装方式适用于小规模使用 多主模式(最少三个), 每个master节点上需要安装keepalived 准备工作(每个节点都需要执行) Docker和kubernetes软件源配置 # 切换到配置目录 cd /etc/yum.repos.d/ # 配

[转帖]Breeze部署kubernetes1.13.2高可用集群

Breeze部署kubernetes1.13.2高可用集群 2019年07月23日 10:51:41 willblog 阅读数 673 标签: kubernetes 更多 个人分类: kubernetes https://blog.csdn.net/networken/article/details/86550735 所知道的太少了.. 不过简单试了下 不是特别好用 国内公司做的系统.. 也可能跟我的虚拟机兼容性有关系.. breeze简介 项目地址:https://github.com/wis

Kubesnetes实战总结 - 部署高可用集群

Kubernetes Master 节点运行组件如下: kube-apiserver: 提供了资源操作的唯一入口,并提供认证.授权.访问控制.API 注册和发现等机制 kube-scheduler: 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上 kube-controller-manager: 负责维护集群的状态,比如故障检测.自动扩展.滚动更新等 etcd: CoreOS 基于 Raft 开发的分布式 key-value 存储,可用于服务发现.共享配置以及一致性保障(如数据

kubeadm部署kubernetes 1.12集群

kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践. 在Kubernetes的文档Creating a single master cluster with kubeadm中已经给出了目前kubeadm的主要特性已经处于beta状态了,在2018年将进入GA状态,说明kube

Mongodb3.4.7搭建高可用集群(二)

部署Mongodb高可用集群 准备 按照官方说明,至少需要3个config server,2个mongos,2个shard,每个shard至少2个副本,就是4个shard,共需要9个Mongodb实例.这里只虚拟出2个机器节点,将不同的Mongodb实例部署在不同的端口上模拟实现. 节点端口关系表 config server leo.zhi.1:10010,leo.zhi.2:10010 mongos server leo.zhi.1:10020,leo.zhi.2:10020 shard se

kubeadm部署k8s1.9高可用集群--4部署master节点

部署master节点 kubernetes master 节点包含的组件: kube-apiserver kube-scheduler kube-controller-manager 本文档介绍部署一个三节点高可用 master 集群的步骤,分别命名为k8s-host1.k8s-host2.k8s-host3: k8s-host1:172.16.120.154 k8s-host2:172.16.120.155 k8s-host3:172.16.120.156 安装docker 在每台主机安装do