1、准备环境
1.1 服务器要求
最小硬件配置:2核CPU、2G内存、20G硬盘 ,服务器网络通。
1.2 系统环境
| 系统 | 版本 |
| 系统环境 | CentOS-7-x86_64 |
| Docker | 20-ce |
| Kubernetes | 1.23.0 |
| KubeSphere | 3.3.0 |
Centos安装都是最小化安装,顾要求安装net-tools工具:
yum install net-tools.x86_64yum install -y yum-utils
1.3 服务器节点
| 服务器名称 | IP | 内存 |
| master | 192.168.254.129 | 6G |
| node1 | 192.168.254.132 | 4G |
| node2 | 192.168.254.1321 | 4G |
分别给三个服务节点配置静态IP,以防止异常启动IP变动。
vim etc/sysconfig/network-scripts/ifcfg-主机名TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static #静态IP状态DEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33DEVICE=ens33IPADDR="192.168.254.131"NETMASK="255.255.255.0"GATEWAY="192.168.254.2" #网关要跟虚拟机当前网关一直,否则无法链接外网DNS1="8.8.8.8"DNS2="114.114.114.114"ONBOOT=yes
虚拟机网关查看:

重启当前Network:
service network restart
2、Kubernetes 准备
Kubernetes集群环境要求主从节点和虚拟机安全策略设置互通。三个服务器节点都要同步设置,以保证Kubernetes 安装顺利。
2.1 Docker安装
可以参考文章:
2.2 主从节点IP解析
在/ect/hosts添加主从节点IP:
[root@node1 ~]# cat etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.254.131 node2192.168.254.132 node1192.168.254.129 master
2.3 禁用firewalld服务
要关闭当前防火墙服务:
[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable firewalldRemoved symlink etc/systemd/system/multi-user.target.wants/firewalld.service.Removed symlink etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
2.4 禁止安全策略
cat etc/selinux/configsed -i 's/enforcing/disabled/' etc/selinux/confi
2.5 禁用swap分区
swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明。
swapoff -ased -ri 's/.*swap.*/#&/' etc/fstab
2.6 桥接的IPv4流量
将桥接的IPv4流量传递到iptables的链:
cat>/etc/sysctl.d/k8s.conf<<EOFnet.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1EOF
执行以下指令生效:
sysctl --system
2.7 kubernetes镜像切换成国内源
因为kubernetes国外源国内来取不下来,所以要切换成国内源:
cat > etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
3、kubernetes 安装
分别在三个节点上通过yum指令安装kubernetes 指定版本:
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
安装完成添加开启自启动:
systemctl enable kubelet.service
查看当前kubernetes 版本:
[root@master kubesphere]# kubelet --versionKubernetes v1.23.0
4、kubernetes 初始化
4.1 Master初始化
在Master 节点初始化,然后子节点通过Join加入Master节点:
kubeadm init \--apiserver-advertise-address=192.168.254.129 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.23.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--ignore-preflight-errors=all
–apiserver-advertise-address #集群通告地址(master 机器IP)
–image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version #K8s版本,与上面安装的一致
–service-cidr #集群内部虚拟网络,Pod统一访问入口
–pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致
遇到问题:
error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node: nodes "master" not found
解决方式:
kubeadm reset -fswapoff -a && kubeadm reset && systemctl daemon-reload && systemctl restart kubelet && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
当前初始化成功会生成指定的token和需要创建的目录指令。
4.2 创建指定目录
mkdir -p $HOME/.kubesudo cp -i etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
4.3 子节点Join
拷贝主节点生成的token指令在node1,node2子节点上执行:
kubeadm join 192.168.254.129:6443 --token cqlp0l.l04l0ueztf4acyuq \--discovery-token-ca-cert-hash sha256:9cb93132d3e01aed6d807f5dd13a6c5f3fcfc3a0e3f4bd0d5de357aabb057160
在主节点生成的token是24小时失效,如果失效可以通过以下指令重新创建:
kubeadm token create --print-join-command
在Master节点通过kubectl指令查看当前子节点是否加入:
[root@master kubesphere]# kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster Ready control-plane,master 4d11h v1.23.0node1 Ready <none> 4d11h v1.23.0node2 Ready <none> 4d11h v1.23.0
通过describe 来查看节点NoReady情况:
kubectl describe nodes node1
5、KubeSphere 准备
5.1 安装存储券
当前 K8s 集群以安装 OpenEBS 并创建 LocalPV 的存储类型来作为默认存储券,从而可以在集群快速安装测试 KubeSphere。
安装过程也可以参考官方文档:
https://v2-1.docs.kubesphere.io/docs/zh-CN/appendix/install-openebs/
注意:基于 OpenEBS 创建 LocalPV 的存储类型仅适用于开发测试环境,不建议在生产环境使用。生产环境建议准备符合 Kubernetes 要求的持久化存储(如 GlusterFS、Ceph、NFS、Neonsan 等分布式存储,或云上的块存储),然后再创建对应的 StorageClass。
5.2 安装Helm
Helm是K8S下的包管理器,相当于apt-get、yum、brew这样的软件工具,命令行客户端工具。主要用于K8S应用程序Chart的创建、打包、发布及管理仓库。在Master安装即可。
源码版本:https://github.com/helm/helm/tags
官网安装:https://helm.sh/docs/intro/install/
采用线上安装:
curl -L https://git.io/get_helm.sh | bash
如果线上无法请求到当前资源,可以自己下载对应的版本,因Kubernetes 版本是1.23.0,顾这边下载的是helm 3.8,安装的时候特别要注意版本,不同的版本不一定兼容。
[root@master ~]# tar -zxvf helm-v3.8.0-linux-amd64.tar.gzlinux-amd64/linux-amd64/tillerlinux-amd64/README.mdlinux-amd64/LICENSElinux-amd64/helm[root@master ~]# mv linux-amd64/helm usr/local/bin/helm[root@master ~]# helm --help
注意:在低版本存在Tiller版本指令,3.0版本以后已经去掉。不能安装低版本那种方式还得安装Tiller。
5.3 安装OpenEBS
安装OpenEBS在master节点,生成 LocalPV 的存储类型。
5.3.1 查看Master污点
[root@master kubesphere]# kubectl describe node master | grep TaintTaints: node-role.kubernetes.io/master:NoSchedule
5.3.2 去掉Master污点
kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule-
5.3.3 添加OpenEBS LocalPV仓库到Helm
helm repo add openebs-localpv https://openebs.github.io/dynamic-localpv-provisionerhelm repo update
5.3.4 Helm 安装OpenEBS
helm install openebs openebs-localpv/localpv-provisioner --namespace openebs --create-namespace
5.3.5 查看openebs 安装情况
kubectl get pods -n openebs
5.3.6 查看storageclass
查看storageclass:
[root@master kubesphere]# kubectl get scNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGEopenebs-device openebs.io/local Delete WaitForFirstConsumer false 38hopenebs-hostpath (default) openebs.io/local Delete WaitForFirstConsumer false 38h
5.3.7 设置默认存储
kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
6、安装kubesphere
因当前Kubernetes 的版本是v1.23.x,顾kubesphere安装版本 3.3.*,安装的过程版本也要对应。安装过程在Master主机执行就行。
6.1 最小化安装
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/kubesphere-installer.yamlkubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/cluster-configuration.yaml
6.2 查看节点安装详情
kubectl get pod --all-namespaces
6.3 日志查看
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
当出现以下安装日志,代表当前kubesphere安装成功:
######################################################## Welcome to KubeSphere! ########################################################Console: http://192.168.254.129:30880Account: adminPassword: P@88w0rdNOTES:1. After you log into the console, please check themonitoring status of service components in"Cluster Management". If any service is notready, please wait patiently until all componentsare up and running.2. Please change the default password after login.#####################################################https://kubesphere.io 2023-02-28 20:41:10#####################################################

6.4 卸载kubesphere
可以去git下载移除kubesphere脚本,具体地址:
https://github.com/kubesphere/ks-installer/blob/release-3.1/scripts/kubesphere-delete.sh
执行当前指令:
chmod 700 kubesphere-delete.shsh kubesphere-delete.sh
6.5 重新添加污点
由于在文档开头手动去掉了 master 节点的 Taint,我们可以在安装完 OpenEBS 和 KubeSphere 后,可以将 master 节点 Taint 加上,避免业务相关的工作负载调度到 master 节点抢占 master 资源:
kubectl taint nodes master node-role.kubernetes.io/master=:NoSchedule
7、卸载Kubernetes
yum -y remove kubelet kubeadm kubectlsudo kubeadm reset -fsudo rm -rvf $HOME/.kubesudo rm -rvf ~/.kube/sudo rm -rvf /etc/kubernetes/sudo rm -rvf /etc/systemd/system/kubelet.service.dsudo rm -rvf /etc/systemd/system/kubelet.servicesudo rm -rvf /usr/bin/kube*sudo rm -rvf /etc/cnisudo rm -rvf /opt/cnisudo rm -rvf /var/lib/etcdsudo rm -rvf /var/etcd




