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 進行登錄。