目录
下载软件和镜像
VMware软件
Ubuntu镜像
安装和配置ubuntu
部署k8s
修改网络配置
安装openssh
k8s相关环境准备
部署k8s
部署master
部署node01
配置网络插件flannel
部署kubesphere
配置默认StorageClass(NFS)
安装nfs服务端
安装nfs客户端nfs-client-provisioner
安装kubesphere
安装devops插件
kubesphere-devops入门
下载 VMware Workstation Pro - VMware Customer Connecthttps://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1625-WIN&productId=1038&rPId=98567&download=true&fileId=b72276af0d1f093c146c6623c463218f&uuId=06903c3f-2a93-4c28-86cf-7526227c96a2https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1625-WIN&productId=1038&rPId=98567&download=true&fileId=b72276af0d1f093c146c6623c463218f&uuId=06903c3f-2a93-4c28-86cf-7526227c96a2
电脑不能运行15.5.0版本,换成16.2.5
傻*注册,切换到英文页面(地址的cn改成en)才能用英文验证码
Ubuntu 20.04.6 LTS (Focal Fossa)https://releases.ubuntu.com/20.04/https://releases.ubuntu.com/20.04/
之前本地安装过docker-desktop附装了wsl还是hyper-V的虚拟机,可能就会弹出这个,自动安装下一步
16版本许可证ZF3R0-FHED2-M80TY-8QYGC-NPKYF
安装成功
安装ubuntu,按以下步骤进行
(163条消息) 虚拟机(VMware)安装Linux(Ubuntu)安装教程_虚拟机安装ubuntu_Brights_Stars_的博客-CSDN博客https://blog.csdn.net/qq_39657434/article/details/112252844?spm=1001.2014.3001.5506https://blog.csdn.net/qq_39657434/article/details/112252844?spm=1001.2014.3001.5506
显示不全,图形界面下方的下一步按钮显示不出来,可能是显示器比例问题,停止虚拟机,
修改显示器成其他比例也不行
解决方案:快捷键 win键 + 鼠标左键按住安装弹窗,往上拖
继续按教程安装
安装完成
担心中途可能受网络限制无法下载一些资源包,配置虚拟机科学上网
一定要打开LAN,少走十年弯路
宿主机命令Ipconfig,找到正在上网的网卡,wifi或以太网接口,wifi的两个都可用:
或
虚拟机网络设置中打开网络代理,选择手动,填写上面宿主机ipv4地址、科学上网工具代理的端口
叉掉即可保存,浏览器可连google
1master、1worker
Ubuntu 20.04 live server版安装(详细版) - 运维密码 - 博客园 (cnblogs.com)https://www.cnblogs.com/mefj/p/14964416.htmlhttps://www.cnblogs.com/mefj/p/14964416.html
参考如下配置虚拟机网络
(163条消息) Ubuntu20.04虚拟机使用Kubeadm从0到1搭建K8S集群(超详细)_kubeadm ubantu_imba_wolf的博客-CSDN博客https://blog.csdn.net/imba_wolf/article/details/123174245https://blog.csdn.net/imba_wolf/article/details/123174245
Vmware编辑 ->虚拟网络编辑 -> vmnet8管理员身份更改设置 -> nat设置 -> 网关ip
添加如下配置,addresss前24位需要和网关前24位相同(同一网段才能直接访问),gateway4填上面的网关地址,其余配置相同即可
生效
修改成功
允许root连接
重启ssh
连接成功
继续按文章设置主机名、关闭防火墙和虚拟交换、转发桥接流量、安装docker、安装kubeadm
所有命令master和node节点都需要执行
注意点1
修改/etc/docker/daemon.json文件配置镜像源
配置镜像源参考如下:
docker国内镜像加速 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/460489756https://zhuanlan.zhihu.com/p/460489756
注意点2
安装指定版本的k8s(高版本的kubeadm无法安装低版本的k8s)
apt-get install -y kubectl=1.22.1-00 kubelet=1.22.1-00 kubeadm=1.22.1-00
部署k8s参考如下
Kubernetes 1.22集群安装教程(基于Ubuntu) | guaosi的博客https://www.guaosi.com/2021/12/05/kubernetes-cluster-install-base-on-ubuntu/https://www.guaosi.com/2021/12/05/kubernetes-cluster-install-base-on-ubuntu/
导出默认配置:
kubeadm config print init-defaults > kubeadm-config.yaml
自行修改以下注意点
或命令行(未实施)
kubeadm init \
--apiserver-advertise-address=192.168.147.200 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.1 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
先安装镜像(master和node都要装)
kubeadm config images pull --config kubeadm-config.yaml
master节点init集群(tee保存日志,因为后续拓展节点要用上里面的内容)
kubeadm init --config=kubeadm-config.yaml | tee kubeadm-init.log
报错(博客中有说改 cgroup驱动,但我没改,下面补上)
【问题解决】[kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz‘ failed wite - 腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/2039072https://cloud.tencent.com/developer/article/2039072
Master节点部署成功
按控制台提示输入命令(为kubetcl创建访问集群的凭证)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
正常访问
切换到node节点执行上面控制台输出的命令
kubeadm join 192.168.147.200:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:cb05fea87b2cc8494a5ecc12590816d6489824569abf122c66a75be4a556aaf9
Node节点添加成功
保存重要文件
mkdir -p /usr/local/install-k8s/core
mv kubeadm-init.log kubeadm-config.yaml /usr/local/install-k8s/core
Node节点还是notready,因为还没给他添加网络配置
# 创建文件夹
mkdir -p /usr/local/install-k8s/plugin/flannel
# 进入flannel文件夹
cd /usr/local/install-k8s/plugin/flannel
# 下载flannel配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 安装flannel
kubectl create -f kube-flannel.yml
开始安装CNI插件flannel,先查看所有的pod,发现coredns一直在pending,输入命令查看coredns详情:
提示有taint,这是因为默认master节点是不可以调度的,node01又还在配置网络,集群没有可以调度的节点,就会一直pending,等待配置完即可
(163条消息) 0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn‘t_YuanOo。的博客-CSDN博客https://blog.csdn.net/weixin_43114954/article/details/119153903https://blog.csdn.net/weixin_43114954/article/details/119153903
片刻后,一切正常:
Node节点已就绪
在 Kubernetes 上最小化安装 KubeSpherehttps://kubesphere.io/zh/docs/v3.3/quick-start/minimal-kubesphere-on-k8s/https://kubesphere.io/zh/docs/v3.3/quick-start/minimal-kubesphere-on-k8s/
wget保存文件
apply立刻报错
去看官网才知道必须要有默认sc
参考如下配置sc,使用nfs类型
配置Ubuntu的nfs服务端(我搭在了master节点,尝试装在node节点,但不知道为什么使用客户端去mount的时候总是卡死,可能是因为当时我node节点既作为服务端,又作为客户端出了问题,但我在master节点上用客户端去mount也不行,以后再复盘一次,后面把master和node上的nfs安装包都卸掉,把master作为服务端、node作为客户端就行)
(163条消息) Ubuntu20.04搭建 NFS 服务_ubuntu nfs_邬图的博客-CSDN博客https://blog.csdn.net/baidu_33032485/article/details/114496376https://blog.csdn.net/baidu_33032485/article/details/114496376
理论上客户端不需要安装,下面会起一个nfs-client-provisioner的容器,当我们yaml配置文件需要一个和pvc匹配的pv时,这个容器会自动连接nfs服务端,在挂载的目录下创建一个目录作为pv,集群里可直接使用这个pv,容器内部可能就是去mount了服务端,集群要找pv,就去容器里找mount到容器里的目录
配置sc
Kubernetes配置默认存储类 - 较劲儿 - 博客园 (cnblogs.com)https://www.cnblogs.com/jiaojiner/articles/15489498.htmlhttps://www.cnblogs.com/jiaojiner/articles/15489498.html
这里可能会出现下面的情况,启动nfs-client-provisioner后事件里报错找不到flannel相关的东西,这个是因为nfs-client-provisioner运行的节点不受flannel管理(比如我的master节点初始化时默认是不参与调度的,可能就不受flannel管理),但很神奇的是,他虽然报这个错,但过一段时间他又能正常运行了,而且是运行在node节点上,可能是集群调他到node上了
我当时看到 nfs-client-provisioner在运行,立刻就开始输命令安装kubesphere,但装完后发现,但看到kubesphere自带的普罗米修斯还在pending
查看原因describe
0/2 nodes are available: 2 pod has unbound immediate PersistentVolumeClaims.
这说明nfs并没有配置成功,kubectl logs发现 Nfs客户端内部报错,PV没有自动创建
waiting for a volume to be created, either by external provisioner “fuseim.pri/ifs” or manually created by system administrator
解决
(163条消息) NFS动态提供Kubernetes存储卷报错问题记录_ag1942的博客-CSDN博客https://blog.csdn.net/ag1942/article/details/115371793https://blog.csdn.net/ag1942/article/details/115371793
这里我重启了虚拟机(可能nfs-client-provisioner又会报错,我的就是报错了,而且事件中没有显示创建成功之类的信息,但又能正常running)
然后测试了一下pvc(test-claim),成功
普罗米修斯也可以挂载PVC了
Node节点上mount服务端的目录进行检查,确实有创建
Nfs客户端provisioner自动创建PV相关知识
(163条消息) k8s volume存储卷、PV、PVC和存储类_k8s查看存储卷_TimeRovers的博客-CSDN博客https://blog.csdn.net/martinlinux/article/details/125357320https://blog.csdn.net/martinlinux/article/details/125357320
安装后的kubesphere没有devops功能,看官网,动态添加
KubeSphere DevOps 系统https://kubesphere.io/zh/docs/v3.3/pluggable-components/devops/https://kubesphere.io/zh/docs/v3.3/pluggable-components/devops/
日志最后显示一大段报错
组件基本没起来
先卸载devops热插拔组件
卸载可插拔组件 (kubesphere.io)https://kubesphere.io/zh/docs/v3.3/pluggable-components/uninstall-pluggable-components/https://kubesphere.io/zh/docs/v3.3/pluggable-components/uninstall-pluggable-components/
我还删除了很多附带安装的组件,openldap、minio、argocd等,将大部分devops相关的东西都一一删掉
怀疑安装失败是由于内存不够以及当时没开代理
给node节点加了4g的内存,开代理、重新安装devops时调整devops的内存要求
安装看似成功了,但有很多pod还在创建(拉镜像)
看到argocd很多pod都用一个镜像,直接docker帮他拉下来
等待,argocd已就绪
前面的截图中有个devops-2799…的pod处于complete,直接删了并没有重启,可能只是个检查相关的pod,不影响
还有个看似很核心的pod一直在pending
查看发现他没被调度
(163条消息) 容器处于`Pending`状态Warning FailedScheduling <unknown> default-scheduler 0/10 nodes are available_warning failedscheduling 117s (x905 over 22h) defa_凌康ACG的博客-CSDN博客https://blog.csdn.net/weixin_44480167/article/details/121417368https://blog.csdn.net/weixin_44480167/article/details/121417368
发现是CPU资源不足,describe中查看信息,cpu至少要2个核,我node节点总共就分了2个核,加大虚拟机cpu分配(加多2个核),其实这个限制可以在enable时调整内存那块改cpu限制
改cpu好像要重启虚拟机,重启(重启集群,nfs-client又挂了,镜像的标签是latest,以后要改成固定版本,等他拉镜像)
Devops-jenkins开始拉镜像了
拉失败了
docker帮他拉
这个镜像挺大的,可能会拉失败(我第一次就失败了)
第二次
拉完镜像,devops-jenkins成功拉起
虽然running但ready0/1,describe发现就绪探针出错
KubeSphere devops-jenkins pod一直未部署完毕 - KubeSphere 开发者社区https://kubesphere.io/forum/d/7224-kubesphere-devops-jenkins-pod/2https://kubesphere.io/forum/d/7224-kubesphere-devops-jenkins-pod/2
增加就绪检测的延时initialDelaySeconds
导出deploy配置
修改配置
就绪改成120秒,存活改成150
重新部署
还是不行
尝试再加大延迟时间(就绪7分,存活7分半)
重新导出yaml修改再部署,不然会说版本没变化不给更新
就绪有问题,存活没报错
真跑起来了
后续再加大就绪和存活探针的延时,我是延迟到了8分和8分半,就都没有报错了,如果不行就尝试再加大延时,这样唯一的缺点就是每次启动集群都要等上10来分钟才能访问kubesphere的一些页面
成功部署devops
去官网学习怎么使用,第一次一定要跟着完整做一遍
1、创建企业空间、项目、用户和平台角色 (kubesphere.io)https://kubesphere.io/zh/docs/v3.3/quick-start/create-workspace-and-project/https://kubesphere.io/zh/docs/v3.3/quick-start/create-workspace-and-project/
2、使用图形编辑面板创建流水线 (kubesphere.io)https://kubesphere.io/zh/docs/v3.3/devops-user-guide/how-to-use/pipelines/create-a-pipeline-using-graphical-editing-panel/https://kubesphere.io/zh/docs/v3.3/devops-user-guide/how-to-use/pipelines/create-a-pipeline-using-graphical-editing-panel/
运行流水线(会显示队列中),发现每次都要启动一个base的pod
第一次要拉一个很大的镜像,可以直接用docker帮他拉
base还要起一个jnlp容器,要拉另外一个大镜像jenkins/inbound-agent:4.10-2
流水线运行成功
流水线运行结束后base也会自动销毁
进入jenkins自带的dashboard(账号密码已经初始化成kubesphere的初始值):
Jenkins 系统设置 | KubeSphere Documentshttps://v2-1.docs.kubesphere.io/docs/zh-CN/devops/jenkins-setting/https://v2-1.docs.kubesphere.io/docs/zh-CN/devops/jenkins-setting/
这里我认为理应是修改后的密码,但还是要用初始密码,原因还不确定,但devops-jenkins容器内部有一段时间一直在报类似下面的异常:
可能是jenkins密码和kubesphere没同步导致的
Kubesphere-devops部署成功,感谢文章中引用到、以及过程中为解决各种小问题参考过的博客。