青云KubeSphere 容器平台部署教程

1.安装环境

操作系统版本:
#cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
内核版本:
#uname -a
Linux master01 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
机器配置:  8CPU      16G内存     100G磁盘
主机名 IP           地址 
192.168.26.1    #集群VIP
192.168.26.2    lb1
192.168.26.3    lb2
192.168.26.4   master01
192.168.26.5   master02
192.168.26.6   master03

2.修改master和node的hosts文件

# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.26.1    #集群VIP
192.168.26.2    lb1
192.168.26.3    lb2
192.168.26.4   master01
192.168.26.5   master02
192.168.26.6   master03

3.安装chrony实现所有服务器间的时间同步

# yum install chrony -y
# systemctl  start chronyd
# sed -i -e '/^server/s/^/#/' -e '1a server ntp.aliyun.com iburst' /etc/chrony.conf
# systemctl  restart chronyd
# timedatectl set-timezone Asia/Shanghai
# timedatectl
      Local time: Fri 2020-11-27 16:06:42 CST
  Universal time: Fri 2020-11-27 08:06:42 UTC
        RTC time: Fri 2020-11-27 08:06:42
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

4.关闭所有节点的防火墙和selinux

# systemctl stop firewalld && systemctl disable  firewalld
# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 主要查看SELINUX=disabled,如果SELINUX=eabled 需要修改为disabled
# setenforce 0
# getenforce
# 关掉swap
# swapoff -a
# 要永久禁掉swap分区,打开如下文件注释掉swap那一行
# vi /etc/fstab

5.配置系统内核参数和调优

配置sysctl内核参数
$ cat > /etc/sysctl.conf <<EOF
vm.max_map_count=262144
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
生效文件
$ sysctl -p 
修改Linux 资源配置文件,调高ulimit最大打开数和systemctl管理的服务文件最大打开数
$ echo "* soft nofile 655360" >> /etc/security/limits.conf
$ echo "* hard nofile 655360" >> /etc/security/limits.conf
$ echo "* soft nproc 655360"  >> /etc/security/limits.conf
$ echo "* hard nproc 655360"  >> /etc/security/limits.conf
$ echo "* soft  memlock  unlimited"  >> /etc/security/limits.conf
$ echo "* hard memlock  unlimited"  >> /etc/security/limits.conf
$ echo "DefaultLimitNOFILE=1024000"  >> /etc/systemd/system.conf 
$ echo "DefaultLimitNPROC=1024000"  >> /etc/systemd/system.conf

6.集群节点上安装docker

# 安装依赖包
# yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加docker软件包的yum源
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 关闭测试版本list(只显示稳定版)
# yum-config-manager --enable docker-ce-edge
# yum-config-manager --enable docker-ce-test
# 更新yum包索引
#  yum makecache fast
# 安装docker
# 直接安装Docker CE
#  yum install docker-ce
# 若需要安装指定版本的Docker CE
# yum list docker-ce --showduplicates|sort -r      #找到需要安装的
# yum install docker-ce-18.06.0.ce -y    
#启动docker
# systemctl start docker & systemctl enable docker


#配置docker 使用阿里云加速
#vi /etc/docker/daemon.json 
{  
 "registry-mirrors": ["https://q2hy3fzi.mirror.aliyuncs.com"]
}
#systemctl daemon-reload && systemctl restart docker

7. 配置节点间ssh互信

配置ssh互信,那么节点之间就能无密访问,方便日后执行自动化部署
# ssh-keygen     # 每台机器执行这个命令, 一路回车即可
# ssh-copy-id  node      # 到master上拷贝公钥到其他节点,这里需要输入 yes和密码

8.先来认识一下青云的kubesphere

官网地址: https://kubesphere.com.cn/
KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的 容器混合云,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。
KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。
KubeSphere 愿景是打造一个基于 Kubernetes 的云原生分布式操作系统,它的架构可以很方便地与云原生生态进行即插即用(plug-and-play)的集成。

9.配置高可用负载均衡节点(在两个lb节点执行)

在两个lb 节点上分别安装haproxy   和  keepalived
#yum install  haproxy  -y   
#systemctl restart haproxy  && systemctl enable haproxy
#修改haproxy 的配置文件
# cat /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
   stats socket /var/lib/haproxy/stats


listen stats
mode http
bind 0.0.0.0:9000
stats enable
stats hide-version
stats uri /
stats realm Haproxy\ Statistics
stats admin if TRUE #启用管理功能
stats hide-version
stats  refresh  30s

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    log                     global
    option                  httplog
    option                  dontlognull
    timeout connect         5000
    timeout client          5000
    timeout server          5000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  kube-apiserver
    bind *:6443
    mode tcp
    option tcplog
    default_backend kube-apiserver
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend kube-apiserver
    mode tcp
    option tcplog
    balance     roundrobin
    default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
    server kube-apiserver-1 192.168.26.4:6443 check
    server kube-apiserver-2 192.168.26.5:6443 check
    server kube-apiserver-3 192.168.26.6:6443 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------

frontend ingress-http
    bind *:80
    default_backend ingress-http
    mode tcp
    option tcplog

backend ingress-http
    balance source
    mode tcp
    server master1 192.168.26.4:30880 check
    server master2 192.168.26.5:30880 check
    server master3 192.168.26.6:30880 check


#重启haproxy服务

#yum install  keepalived  -y   
#systemctl restart keepalived  && systemctl enable keepalived
修改keepalived 的 配置文件:
主节点的配置为:
[root@lb1 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
  notification_email {
  }
  router_id LVS_DEVEL02
  vrrp_skip_check_adv_addr
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}
vrrp_script chk_haproxy {
  script "killall -0 haproxy"
  interval 2
  weight 2
}
vrrp_instance haproxy-vip {
  state BACKUP
  priority 90
  interface eth0
  virtual_router_id 60
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  unicast_src_ip 192.168.26.2
  unicast_peer {
    192.168.26.3
  }
  virtual_ipaddress {
    192.168.26.1/20
  }
  track_script {
    chk_haproxy
  }
}

[root@lb1 ~]#

#备节点的配置为:
[root@lb2 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
  notification_email {
  }
  smtp_connect_timeout 30
  router_id LVS_DEVEL01
  vrrp_skip_check_adv_addr
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}
vrrp_script chk_haproxy {
  script "killall -0 haproxy"
  interval 2
  weight 2
}
vrrp_instance haproxy-vip {
  state MASTER
  priority 100
  interface eth0
  virtual_router_id 60
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  unicast_src_ip 192.168.26.3
  unicast_peer {
    192.168.26.2
  }
  virtual_ipaddress {
    #vip
    192.168.26.1/20
  }
  track_script {
    chk_haproxy
  }
}
[root@lb2 ~]#

#重启两个节点的keepalived
#打开浏览器访问haproxy 的监控信息
#http://192.168.26.1:9000/       我的截图是后截的,默认负载到后端是红色的。

10.开始部署青云KubeSphere 容器平台(在master01 三操作)

从 v3.0.0 开始,KubeSphere 将基于 ansible 的安装程序更改为使用 Go 语言开发的名为 KubeKey 的新安装程序。使用 KubeKey,可以轻松、高效、灵活地单独或整体安装 Kubernetes 和 KubeSphere。

有三种情况可以使用 KubeKey。

1.仅安装 Kubernetes
2.用一个命令中安装 Kubernetes 和 KubeSphere
3.首先安装 Kubernetes,然后使用 ks-installer 在其上部署 KubeSphere
重要提示:Kubekey 将会帮您安装 Kubernetes,若已有 Kubernetes 集群请参考 在 Kubernetes 之上安装 KubeSphere。


优势
1.基于 Ansible 的安装程序具有大量软件依赖性,例如 Python。KubeKey 是使用 Go 语言开发的,可以消除在各种环境中出现的问题,从而提高安装成功率。
2.KubeKey 使用 Kubeadm 在节点上尽可能多地并行安装 K8s 集群,以降低安装复杂性并提高效率。与较早的安装程序相比,它将大大节省安装时间。
3.KubeKey 支持将群集从 all-in-one 扩展到多节点群集甚至 HA 集群。
4.KubeKey 旨在将群集当作一个对象操作,即 CaaO。

支持的环境
Linux 发行版  Ubuntu 16.04, 18.04  Debian Buster, Stretch  CentOS/RHEL 7  SUSE Linux Enterprise Server 15
Kubernetes 版本
v1.15:   v1.15.12
v1.16:   v1.16.13
v1.17:   v1.17.9 (默认)
v1.18:   v1.18.6

注意: KubeSphere目前暂不支持运行在k8s 1.19.x之上。

最低资源要求(仅对于最小安装 KubeSphere):
2 核虚拟 CPU    4 GB 内存   20 GB 储存空间
/var/lib/docker 主要用于存储容器数据,在使用和操作过程中会逐渐增大。对于生产环境,建议 /var/lib/docker 单独挂盘。

操作系统要求:
1.SSH 可以访问所有节点。
2.所有节点的时间同步。
3.sudo/curl/openssl 应在所有节点使用。
4.docker 可以自己安装,也可以通过 KubeKey 安装。
5.Red Hat 在其 Linux 发行版本中包括了SELinux,建议关闭SELinux或者将SELinux的模式切换为Permissive[宽容]工作模式
7.建议您的操作系统环境足够干净 (不安装任何其他软件),否则可能会发生冲突。
8.如果在从 dockerhub.io 下载镜像时遇到问题,建议准备一个容器镜像仓库 (加速器)。为 Docker 守护程序配置镜像加速。
9.默认情况下,KubeKey 将安装 OpenEBS 来为开发和测试环境配置 LocalPV,这对新用户来说非常方便。对于生产,请使用 NFS/Ceph/GlusterFS 或商业化存储作为持久化存储,并在所有节点中安装相关的客户端 。
10.如果遇到拷贝时报权限问题Permission denied,建议优先考虑查看SELinux的原因。


依赖要求:
KubeKey 可以同时安装 Kubernetes 和 KubeSphere。根据 KubeSphere 所安装版本的不同,您所需要安装的依赖可能也不同。请参考以下表格查看您是否需要提前在节点上安装有关的依赖。

网络和 DNS 要求:
确保 /etc/resolv.conf 中的 DNS 地址可用。否则,可能会导致群集中出现某些 DNS 问题。
如果您的网络配置使用防火墙或安全组,则必须确保基础结构组件可以通过特定端口相互通信。建议您关闭防火墙或遵循链接配置:网络访问。

获取安装程序可执行文件

# yum install -y git
# git clone https://github.com/kubesphere/kubekey.git
#cd  kubekey-1.0.1
#./build.sh  -p

注意:
#在构建之前,需要先安装 Docker。
#如果无法访问 https://proxy.golang.org/,比如在大陆,请执行 build.sh -p

创建集群

这里我们使用高级用法:
#mkdir   /root/kubekey-1.0.1/myfolder/
#cd  /root/ kubekey-1.0.1
#./output/kk create config --with-kubesphere -f /root/kubekey-1.0.1/myfolder/config.yaml
创建出来的文件可按照如下的模版修改:

apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:
  name: kubesphere
spec:
  hosts:
  - {name: master01, address: 192.168.26.4, internalAddress: 192.168.26.4, user: root, password: hcy3R0vs0rHhibnfgLvr}
  - {name: master02, address: 192.168.26.5, internalAddress: 192.168.26.5, user: root, password: hcy3R0vs0rHhibnfgLvr}
  - {name: master03, address: 192.168.26.6, internalAddress: 192.168.26.6, user: root, password: hcy3R0vs0rHhibnfgLvr}
  roleGroups:
    etcd:
    - master01
    - master02
    - master03
    master:
    - master01
    - master02
    - master03
    worker:
    - master01
    - master02
    - master03
  controlPlaneEndpoint:
    domain: kubesphere.alauda.cn
    address: "192.168.26.1"
    port: "6443"
  kubernetes:
    version: v1.17.9
    imageRepo: kubesphere
    clusterName: cluster.local
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
  registry:
    registryMirrors: []
    insecureRegistries: []
  addons: []

---
apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration
metadata:
  name: ks-installer
  namespace: kubesphere-system
  labels:
    version: v3.0.0
spec:
  local_registry: ""
  persistence:
    storageClass: ""
  authentication:
    jwtSecret: ""
  etcd:
    monitoring: true
    endpointIps: 192.168.26.4,192.168.26.5,192.168.26.6
    port: 2379
    tlsEnable: true
  common:
    es:
      elasticsearchDataVolumeSize: 20Gi
      elasticsearchMasterVolumeSize: 4Gi
      elkPrefix: logstash
      logMaxAge: 7
    mysqlVolumeSize: 20Gi
    minioVolumeSize: 20Gi
    etcdVolumeSize: 20Gi
    openldapVolumeSize: 2Gi
    redisVolumSize: 2Gi
  console:
    enableMultiLogin: false  # enable/disable multi login
    port: 30880
  alerting:
    enabled: true
  auditing:
    enabled: true
  devops:
    enabled: true
    jenkinsMemoryLim: 2Gi
    jenkinsMemoryReq: 1500Mi
    jenkinsVolumeSize: 8Gi
    jenkinsJavaOpts_Xms: 512m
    jenkinsJavaOpts_Xmx: 512m
    jenkinsJavaOpts_MaxRAM: 2g
  events:
    enabled: true
    ruler:
      enabled: true
      replicas: 2
  logging:
    enabled: true
    logsidecarReplicas: 2
  metrics_server:
    enabled: true
  monitoring:
    prometheusMemoryRequest: 400Mi
    prometheusVolumeSize: 20Gi
  multicluster:
    clusterRole: none  # host | member | none
  networkpolicy:
    enabled: true
  notification:
    enabled: true
  openpitrix:
    enabled: true
  servicemesh:
    enabled: true


#注意: 由于 Kubernetes 暂不支持大写 NodeName, worker 节点名中包含大写字母将导致后续安装过程无法正常结束
#当指定安装KubeSphere时,要求集群中有可用的持久化存储。默认使用localVolume,如果需要使用其他持久化存储,请参阅 addons 配置。


#使用配置文件创建集群。
#./output/kk create cluster -f /root/kubekey-1.0.1/myfolder/config.yaml

#使用如下命令可查看部署日志
# kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

#当出现如下的日志时候就代表已经部署完成了。(保存图片中的登录的地址,用户名和密码,默认为Account: admin    Password: P@88w0rd)

11.启用 kubectl 自动补全

KubeKey 不会启用 kubectl 自动补全功能。请参阅下面的指南并将其打开:
先决条件:确保已安装 bash-autocompletion 并可以正常工作。

# 安装 bash-completion
yum -y  install bash-completion

# 将 completion 脚本添加到你的 ~/.bashrc 文件
echo 'source <(kubectl completion bash)' >>~/.bashrc

# 将 completion 脚本添加到 /etc/bash_completion.d 目录
kubectl completion bash >/etc/bash_completion.d/kubectl

**12.登录青云KubeSphere 容器平台 **
#浏览器打开: http://kubesphere.alauda.cn/ 使用 Account: admin Password: P@88w0rd 进行登录。



posted @ 2020-12-04 16:21  南风不知我意  阅读(3529)  评论(1编辑  收藏  举报