ky.yang

blog


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

搭建kubernetes高可用集群-06部署LB高可用集群

发表于 2018-08-12 | 分类于 kubernetes , LB |

LB节点安装

部署API高可用集群 nginx及keepalived组件

安装nginx、keepalived

yum -y install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
yum -y install keepalived
useradd nginx -s /sbin/nologin
tar xvf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module  \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module  \
--with-stream --with-stream_ssl_module
make
make install
阅读全文 »

搭建kubernetes高可用集群-05部署apiserver节点

发表于 2018-08-12 | 分类于 kubernetes , apiserver |

apiserver做为整个kubernetes集群的入口,重要程度可想而知,为了避免单点故障情况,在这里采用部署多个apiserver节点用来分担apiserver流量以及提供高可用性。前端调度可采用4或7层做反向代理,流量分担到后端的这几个apiserver节点,如有性能问题,还可以快速水平扩展,加入新的节点,分担流量。

安装部署 apiserver 节点

检查确认相应证文件文件及配置文件是否在指定路径

ls /etc/kubernetes/ssl/
ca-key.pem  ca.pem  kubernetes-key.pem  kubernetes.pem

ls /etc/kubernetes/
bootstrap.kubeconfig  kube-proxy.kubeconfig  ssl  token.csv

下载解压安装包文件及复制执行文件到 /usr/local/bin 目录

安装kube-apiserver

cp -v kube-apiserver /usr/local/bin/kube-apiserver
chmod +x /usr/local/bin/kube-apiserver
阅读全文 »

搭建kubernetes高可用集群-04部署高可用etcd集群

发表于 2018-08-02 | 分类于 kubernetes , etcd |

创建高可用etcd集群

kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点ip分别是:192.168.255.194,192.168.255.195, 192.168.255.196

TLS认证文件

需要为 etcd 集群创建加密通信的 TLS 证书,这里复用以前创建的 kubernetes 证书

cp ca.pem /etc/kubernetes/ssl
cp kubernetes-key.pem /etc/kubernetes/ssl
cp kubernetes.pem /etc/kubernetes/ssl

kubernetes 证书的 hosts 字段列表中包含上面三台机器的 IP,否则后续证书校验会失败;

在ETCD节点上安装ETCD

到 https://github.com/coreos/etcd/releases 页面下载最新版本的二进制文件

wget https://github.com/coreos/etcd/releases/download/v3.1.5/etcd-v3.1.5-linux-amd64.tar.gz
tar -xvf etcd-v3.1.5-linux-amd64.tar.gz
mv etcd-v3.1.5-linux-amd64/etcd* /usr/local/bin
阅读全文 »

搭建kubernetes高可用集群-03创建kubeconfig文件

发表于 2018-07-14 | 分类于 kubernetes |

安装kubectl工具

  • 下载安装文件
    从 CHANGELOG 页面 下载 client 或 server tarball 文件
    server 的 tarball kubernetes-server-linux-amd64.tar.gz 已经包含了 client(kubectl) 二进制文件,所以不用单独下载kubernetes-client-linux-amd64.tar.gz文件;
wget https://dl.k8s.io/v1.10.2/kubernetes-server-linux-amd64.tar.gz
tar -xzvf kubernetes-server-linux-amd64.tar.gz
cd kubernetes
  • 将二进制文件拷贝到指定路径
cp server/bin/kubectl /usr/local/bin/

创建kubeconfig文件

以下操作只需要在master节点上执行,生成的*.kubeconfig文件可以直接拷贝到node节点的/etc/kubernetes目录下

创建TLS Bootstrapping token

  • Token auth file
    Token可以是任意的包含128 bit的字符串,可以使用安全的随机数发生器生成
export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
cat > token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF

注意:在进行后续操作前请检查 token.csv 文件,确认其中的 ${BOOTSTRAP_TOKEN} 环境变量已经被真实的值替换。

BOOTSTRAP_TOKEN 将被写入到 kube-apiserver 使用的 token.csv 文件和 kubelet 使用的 bootstrap.kubeconfig 文件,如果后续重新生成了 BOOTSTRAP_TOKEN,则需要:

  1. 更新 token.csv 文件,分发到所有机器 (master 和 node)的 /etc/kubernetes/ 目录下,分发到node节点上非必需;
  2. 重新生成 bootstrap.kubeconfig 文件,分发到所有 node 机器的 /etc/kubernetes/ 目录下;
  3. 重启 kube-apiserver 和 kubelet 进程;
  4. 重新 approve kubelet 的 csr 请求;
cp token.csv /etc/kubernetes/
阅读全文 »

搭建kubernetes高可用集群-02创建TLS证书和密钥

发表于 2018-06-30 | 分类于 kubernetes |

创建TLS证书和密钥

安装CFSSL

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
chmod +x cfssl_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl

wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
chmod +x cfssljson_linux-amd64
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl-certinfo_linux-amd64
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

创建CA

创建CA配置文件

mkdir /root/ssl
cd /root/ssl
cfssl print-defaults config > config.json
cfssl print-defaults csr > csr.json

# 根据config.json文件的格式创建如下的ca-config.json文件
# 过期时间设置成了 87600h
cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}
EOF
阅读全文 »

搭建kubernetes高可用集群-01准备环境

发表于 2018-06-29 | 分类于 kubernetes |

准备环境

部署架构图

kuberntes arch

主机分配

num hostname role ip addr
1 etcd1 etcd 192.168.255.194
2 etcd2 etcd 192.168.255.195
3 etcd3 etcd 192.168.255.196
4 apiserver1 api srever 192.168.255.190
5 apiserver2 api srever 192.168.255.191
6 apiserver3 api srever 192.168.255.192
7 node1 node 192.168.255.200
8 node2 node 192.168.255.201
9 node3 node 192.168.255.202
10 master LB 192.168.255.199
11 master_backup LB 192.168.255.198
12 LBvip vip 192.168.255.197

ETCD节点3台,kube-apiserver节点3台, node节点3台, LB两台主备,VIP一个

controller manager和 scheduler和LB一起部署,所有业务进程统一使用monit进行维护;

阅读全文 »

k8s v1.8.13 拉取私有镜像仓库镜像失败问题处理笔记

发表于 2018-06-22 | 分类于 kubernetes |

报错日志

Failed to pull image  "image-url/web/nginx": rpc error : code = Unknown desc = error response form daemon: pull access denied for image-url/web/nginx , repository does not exist or may require 'docker login'

解决

#创建secret
kubectl create secret docker-registry SECRET-NAME --docker-server=registry.kyloverose.com  --docker-username=web --docker-password=you-password --docker-email=kyvicp@gmail.com

#配置默认规则,将密钥设置到默认账号中
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "SECRET-NAME"}]}

#查看默认账号配置
kubectl get serviceaccounts  default -o yaml

说明:

  • secret名: SECRET-NAME
  • –docker-server 为docker login时的域名
  • –docker-username 是登录镜仓库的用户名
  • –docker-password 登录镜仓库的密码
  • –docker-email 邮箱账号

GC垃圾回收

发表于 2018-06-22 | 分类于 搬砖系列 |
  1. 垃圾收集简介 - GC参考手册

  2. Java中的垃圾收集 - GC参考手册

  3. GC 算法(基础篇) - GC参考手册

  4. GC 算法(实现篇) - GC参考手册

  5. GC 调优(基础篇) - GC参考手册

  6. GC 调优(工具篇) - GC参考手册

  7. GC 调优(实战篇) - GC参考手册

OutOfMemoryError系列

发表于 2018-06-22 | 分类于 搬砖系列 |
  • OutOfMemoryError系列(1): Java heap space

  • OutOfMemoryError系列(2): GC overhead limit exceeded

  • OutOfMemoryError系列(3): Permgen space

  • OutOfMemoryError系列(4): Metaspace

  • OutOfMemoryError系列(5): Unable to create new native thread

  • OutOfMemoryError系列(6): Out of swap space?

  • OutOfMemoryError系列(7): Requested array size exceeds VM limit

  • OutOfMemoryError系列(8): Kill process or sacrifice child

ELK优化笔记

发表于 2018-06-22 | 分类于 elk |

节点规划

  • 数据节点 :只存储索引数据和数据查询
    node.master: false 
    node.data: true
    
  • Master节点:不存储任何索引数据。该node主要协调各种创建索引请求或者查询请求,将这些请求合理分发到相关 的node服务器上
    node.master: true 
    node.data: false
    
  • 只读节点:不会被选作主节点,也不会存储任何索引数据。该服务器主要用 于查询负载均衡。在查询的时候,通常会涉及到从多个node服务器上查询数据,并请 求分发到多个指定的node服务器,并对各个node服务器返回的结果进行一个汇总处理, 最终返回给客户端。
    node.master: false 
    node.data: false
    

关闭data节点服务器中的http功能

针对ElasticSearch集群中的所有数据节点,不用开启http服务。将其中的配置 参数这样设置:http.enabled: false

可以在非数据节点上开启HTTP 功能,以及部署第三方插件。

一个服务器只部署一个数据节点

  • 服务器硬件配置建议:内存>64G,cpu 16C,
  • 服务器内存分配建议:以64G内存为例,jvm内存最大堆最大大小32G(不建议超32G), GC 算法建议使用GC1,默认CMS。如果大于128G可以跑两个ES实例。

    ES_MIN_MEM=32g
    ES_MAX_MEM=32g
    JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
    JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=200 -Xss128m"
    

    如果在一个机器上跑多个ES实例,需设置 cluster.routing.allocation.same_shard.host:true 参数,防止同一个shard的主副本存在同一个物理机上, -Xss设置线程大小

  • Master节点建议CPU 内核数 >=16

  • 数据节点建议SSD+Reid 0

    比如100节点的ES集群,建议至少3个master 节点,10个只读节点,剩下全是数据节点。

阅读全文 »
12

ky yang

This is my blog.

17 日志
10 分类
22 标签
GitHub Google
© 2017 — 2018 ky yang
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4