kubernetes高可用集群安装配置要点

k8s安装

  1. master节点内存不能小于2G
  2. 虚拟机采用vitualbox,网络可选用桥接网卡的形式,虚机可访问外网、可互访、可与宿主机通信
  3. dashboard的token失效时间更改
  4. 测试部署采用1个部署节点,1个(3个)master节点,1个(3个)node节点
  5. 部署采用kubeasz AllinOne的方式部署即可
    • 百度云资料下载可通过BaiduPCS-Go工具进行下载
    • 每台机器需要配置好 SSH 互访
    • 安装完成后,主要在部署节点进行 k8s 操作

dashboard设置

  1. 修改dashboard的token过期时间

    1
    2
    3
    4
    # 在dashboar的部署文件修改如下参数
    args:
    - --auto-generate-certificates
    - --token-ttl=43200 //增加该参数,43200单位为秒
  2. 获取登陆dashboard的token

    1
    2
    3
    4
    5
    6
    # 获取dashboard的token
    kubectl get secrets -n kube-system
    # 其中admin-user开头的即为dashboard使用的账号
    kubectl describe secrets -n kube-system admin-user-token-dvcqz
    # 获取token或者如下一步获取
    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

helm安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 客户端
# 下载helm 客户端的tgz包,需要翻墙下载
# 例如 wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-windows-amd64.zip
# 服务端安装
helm init --tiller-image jmgao1983/tiller:v2.9.1

# 客户端与服务器的版本必须匹配,可输入命令
helm version 查看
# 使用helm安装软件 helm install
# 直接下载未成功,需要将helm的chart的
# Git仓库克隆到本地下载,比如安装traefik ingress
使用如下命令
helm install --name traefik -f value.yaml ./traefik
# 如果k8s项目采用了RBAC授权,需要先创建traefik所使用的serviceaccount,并授权
# value.yaml作如下修改
serviceType: NodePort
ssl.enabled: true # 开启ssl
ssl.enforced: true # 80跳转到443
acme.enabled: true # 开启acme(自动创建使用let's encrypt证书)
acme.email: xiechao1211@126.com
acme.domains.enabled: true
acme.domains.domainsList: "*.example.con"
# 泛域名证书
# 以下4项为 let's encrypt的证书申请要求,采用自动DNS的txt记录认证,通过指定的DNS服务器提供的API,会自动往域名的DNS解析中写入一条txt记录
challengeType: "dns-01"
dnsProvider.name: godaddy
dnsProvider.godaddy.GODADDY_API_KEY: "KEY"
dnsProvider.godaddy.GODADDY_API_SECRET: "SECRET"

安装heapster相关

安装完成后dashborad自动增加显示节点性能图表

1
2
3
# 直接使用以下命令即可安装 heapster influxdb grafana
# 安装完成后,稍等1分钟即可在dashboard中看到CPU 内存消耗相关数据
kubectl create -f /etc/ansible/manifests/heapster/

NFS持久化处理

  1. 搭建服务端(Ubuntu)

    1
    2
    3
    4
    5
    6
    7
    8
    apt-get install nfs-kernel-server
    mkdir /nfs/data
    chmod a+rw /nfs/data
    vi /etc/exports
    # 增加如下一行
    /nfs/data *(rw,sync,no_subtree_check)
    # 将 /nfs/data 开放,* 代表所有ip可访问
    # rw是读写权限,sync是同步权限,no_subtree_check表示如果输出目录是一个子目录,nfs服务器不检查其父目录的权限
  2. 安装客户端

    1
    2
    3
    4
    5
    6
    # 所有Node机器上
    apt-get install -y nfs-common
    # 创建nfs需要用到的serviceaccount
    # 参考 nfs-serviceaccount.yaml
    # 创建 nfs部署服务(用于挂载nfs),参考nfs.yaml,其中的nfs挂载地址也可换成其他服务商的挂载地址(如阿里云)
    # 创建StorgeClass进行使用,参考 sc.yaml

nfs部署及StoregeClass均无物创建之后,可进行使用,如在traefik中使用了ACME的持久化处理,该步骤需要先处理

  1. CentOS
    参考如下:Linux—centos安装配置并挂载NFS

    停止部署/启动部署最快捷的方式

    1
    2
    3
    4
    # 伸缩部署为0即相当于停止了部署运行或者
    kubectl scale deploy deploy-name --replicas=0
    kubectl scale deploy deploy-name --replicas=1
    # 即完成了部署的重启工作

ConfigMap创建和挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 创建 configmap
kubectl create configMap name --from-file=PATH
# 如果不给name 默认文件名为configmap的KEY
# 挂载configmap可参考如下:
spec:
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
volumeMounts:
- name: nginx-config-volume
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
# 关键在subPath这个参数,必须指定文件
volumes:
- name: nginx-config-volume
configMap:
name: nginx-conf