使用kubeasz一键部署k8s,安装kubesphere,进行devops

偏执的太偏执、 2022-12-11 03:10 303阅读 0赞

使用kubeasz一键部署k8s

  • 机器安排
  • 所有机器安装依赖工具和免登录
  • master机器安装ansible
  • master机器下载工具脚本easzup
  • master机器下载 k8s 版本安装文件
  • master机器加入阿里云镜像地址
  • master机器控制端编排k8s安装
  • 给node机器加上阿里云镜像
  • master安装helm3.0
  • master安装nfs
    • 安装配置nfs
  • 安装kubesphere
  • 访问kubesphere
  • 继续安装kubesphere的插件
  • 自定义centos镜像用于编译java代码

机器安排






































ip 角色 CPU 内存 硬盘 软件情况
192.168.152.164 master 2 8G(可减少) 50G centos7.8新机器
192.168.152.165 node01 2 8G(可减少) 50G centos7.8新机器
192.168.152.165 node02 2 8G(可减少) 50G centos7.8新机器

所有机器安装依赖工具和免登录

  1. # 文档中脚本默认均以root用户执行,这一步安装时间比较久
  2. yum update
  3. # 安装python
  4. yum install python -y
  5. # CentOS 7
  6. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  7. yum -y install python-pip
  8. # 更安全 Ed25519 算法
  9. ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519
  10. # 或者传统 RSA 算法
  11. ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
  12. ssh-copy-id $IPs #$IPs为所有节点地址包括自身,按照提示输入yes 和root密码 每台机器操作3次

注意$IPs为所有节点地址包括自身

master机器安装ansible

  1. # pip安装ansible(国内如果安装太慢可以直接用pip阿里云加速)
  2. pip install pip --upgrade -i https://mirrors.aliyun.com/pypi/simple/
  3. pip install ansible==2.6.18 netaddr==0.7.19 -i https://mirrors.aliyun.com/pypi/simple/

master机器下载工具脚本easzup

  1. export release=2.2.1
  2. curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${
  3. release}/easzup
  4. chmod +x ./easzup

release的参数尽量选择比较高的版本,我目前这里是2.2.1最新

master机器下载 k8s 版本安装文件

我个人观点:有些版本是有坑的,比如1.18.2,我用这个1.18.2版本怎么都安装不了kubesphere。我测得1.18.6对kubesphere兼容还可行。

  1. ./easzup -D -d 19.03.5 -k v1.18.6

master机器加入阿里云镜像地址

./easzup -D -d 19.03.5 -k v1.18.6这个命令可能会执行比较久,如果我们发现/etc/docker/daemon.json自动生成之后,我们可以手动添加阿里云镜像地址:

  1. "https://b9pmyelo.mirror.aliyuncs.com"

在这里插入图片描述
然后

  1. systemctl daemon-reload&&systemctl restart docker
  2. #重新下载
  3. ./easzup -D -d 19.03.5 -k v1.18.6

master机器控制端编排k8s安装

参考GitHub链接:

  1. https://github.com/easzlab/kubeasz/blob/master/docs/setup/00-planning_and_overall_intro.md#ha-architecture
  2. cd /etc/ansible && cp example/hosts.multi-node hosts
  3. vi hosts

修改hosts文件如下:
在这里插入图片描述

  1. #开始安装,执行完之前需要等待几分钟
  2. ansible-playbook 90.setup.yml

在这里插入图片描述

给node机器加上阿里云镜像

类似master机器加入阿里云镜像地址这一节内容

  1. "https://b9pmyelo.mirror.aliyuncs.com"

master安装helm3.0

在github的releases中找个3.X的版本下载
在这里插入图片描述

  1. # 解压安装包
  2. tar -zxvf helm-v3.3.0-linux-amd64.tar.gz
  3. # 在解压后的目录中找到二进制文件,然后将其移至所需的目标位置
  4. mv linux-amd64/helm /usr/local/bin/helm
  5. # 初始化Helm存储库
  6. helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  7. #列出可以安装的charts
  8. helm search repo stable

master安装nfs

安装配置nfs

client端,这里为两个node节点

  1. yum -y install nfs-utils

server端,master节点

  1. 1.安装包
  2. yum -y install nfs-utils rpcbind
  3. 2.编辑配置文件
  4. 配置文件中的*是允许所有网段,根据自己实际情况写明网段
  5. cat >/etc/exports <<EOF
  6. /data *(insecure,rw,async,no_root_squash)
  7. EOF
  8. 3.创建目录并修改权限
  9. 这里为了方便实验授予了挂载目录权限为777,请根据实际情况修改目录权限和所有者
  10. mkdir /data && chmod 777 /data
  11. 4.启动服务
  12. systemctl enable nfs-server rpcbind && systemctl start nfs-server rpcbind
  13. 5192.168.152.174/175机器上验证
  14. showmount -e 192.168.152.171

配置storageclass,注意修改nfs服务端IP和共享目录

  1. cat >storageclass.yaml <<EOF
  2. ---
  3. apiVersion: v1
  4. kind: ServiceAccount
  5. metadata:
  6. name: nfs-provisioner
  7. ---
  8. kind: ClusterRole
  9. apiVersion: rbac.authorization.k8s.io/v1
  10. metadata:
  11. name: nfs-provisioner-runner
  12. namespace: default
  13. rules:
  14. - apiGroups: [""]
  15. resources: ["persistentvolumes"]
  16. verbs: ["get", "list", "watch", "create", "delete"]
  17. - apiGroups: [""]
  18. resources: ["persistentvolumeclaims"]
  19. verbs: ["get", "list", "watch", "update"]
  20. - apiGroups: ["storage.k8s.io"]
  21. resources: ["storageclasses"]
  22. verbs: ["get", "list", "watch"]
  23. - apiGroups: [""]
  24. resources: ["events"]
  25. verbs: ["watch", "create", "update", "patch"]
  26. - apiGroups: [""]
  27. resources: ["services", "endpoints"]
  28. verbs: ["get","create","list", "watch","update"]
  29. - apiGroups: ["extensions"]
  30. resources: ["podsecuritypolicies"]
  31. resourceNames: ["nfs-provisioner"]
  32. verbs: ["use"]
  33. ---
  34. kind: ClusterRoleBinding
  35. apiVersion: rbac.authorization.k8s.io/v1
  36. metadata:
  37. name: run-nfs-provisioner
  38. subjects:
  39. - kind: ServiceAccount
  40. name: nfs-provisioner
  41. namespace: default
  42. roleRef:
  43. kind: ClusterRole
  44. name: nfs-provisioner-runner
  45. apiGroup: rbac.authorization.k8s.io
  46. ---
  47. kind: Deployment
  48. apiVersion: apps/v1
  49. metadata:
  50. name: nfs-client-provisioner
  51. spec:
  52. selector:
  53. matchLabels:
  54. app: nfs-client-provisioner
  55. replicas: 1
  56. strategy:
  57. type: Recreate
  58. template:
  59. metadata:
  60. labels:
  61. app: nfs-client-provisioner
  62. spec:
  63. serviceAccount: nfs-provisioner
  64. containers:
  65. - name: nfs-client-provisioner
  66. image: quay.io/external_storage/nfs-client-provisioner:latest
  67. imagePullPolicy: IfNotPresent
  68. volumeMounts:
  69. - name: nfs-client
  70. mountPath: /persistentvolumes
  71. env:
  72. - name: PROVISIONER_NAME
  73. value: fuseim.pri/ifs
  74. - name: NFS_SERVER
  75. value: 192.168.152.164 #此处修改为nfs服务器ip
  76. - name: NFS_PATH
  77. value: /data #这里为nfs共享目录
  78. volumes:
  79. - name: nfs-client
  80. nfs:
  81. server: 192.168.152.164 #此处修改为nfs服务器ip
  82. path: /data #这里为nfs共享目录
  83. ---
  84. apiVersion: storage.k8s.io/v1
  85. kind: StorageClass
  86. metadata:
  87. name: nfs-storage
  88. provisioner: fuseim.pri/ifs
  89. reclaimPolicy: Retain
  90. EOF

注意:quay.io/external_storage/nfs-client-provisioner:latest有可能下载不了

创建storageclass

  1. # 下载镜像
  2. docker pull registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner:latest
  3. docker tag registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner:latest quay.io/external_storage/nfs-client-provisioner:latest
  4. kubectl apply -f storageclass.yaml

设置默认strorageclass

  1. kubectl patch storageclass nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

检查nfs-client pod状态

  1. #这里是在default命名空间下创建的
  2. kubectl get pods
  3. NAME READY STATUS RESTARTS AGE
  4. nfs-client-provisioner-7b9746695c-nrz4n 1/1 Running 0 2m38s

检查默认存储

  1. #这里是在default命名空间下创建的
  2. kubectl get sc
  3. NAME PROVISIONER AGE
  4. nfs-storage (default) fuseim.pri/ifs 7m22s

安装kubesphere

下载kubesphere-installer.yaml、cluster-configuration.yaml文件:

  1. https://raw.githubusercontent.com/kubesphere/ks-installer/v3.0.0/deploy/kubesphere-installer.yaml
  2. https://raw.githubusercontent.com/kubesphere/ks-installer/v3.0.0/deploy/cluster-configuration.yaml

在这里插入图片描述

修改cluster-configuration.yaml的etcd地址
在这里插入图片描述
安装kubesphere-installer

  1. kubectl apply -f kubesphere-installer.yaml

等待几分钟,让它安装成功
在这里插入图片描述

安装cluster-configuration.yaml
等kubesphere-installer安装成功后,执行下面命令

  1. kubectl apply -f cluster-configuration.yaml
  2. #查看执行日志
  3. kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

在这里插入图片描述
在这里插入图片描述

访问kubesphere

  1. Console: http://192.168.152.164:30880
  2. Account: admin
  3. Password: P@88w0rd

在这里插入图片描述

继续安装kubesphere的插件

修改cluster-configuration.yaml
在这里插入图片描述
执行安装:

  1. kubectl apply -f cluster-configuration.yaml

自定义centos镜像用于编译java代码

  1. #删除所有Exited的镜像
  2. docker rm $(docker ps -a | grep Exited | awk '{print $1}')
  3. #运行镜像
  4. docker run -d -i -t centos:latest /bin/bash
  5. #拷贝文件 427e2bbd8655是centos:latest 镜像id
  6. docker cp /root/centos/ 427e2bbd8655:/opt
  7. #进入容器
  8. docker exec -it 427e2bbd8655 /bin/bash
  9. #进入工作目录
  10. cd /opt/centos
  11. #解压文件
  12. rm -f apache-maven-3.6.3-bin.tar.gz
  13. tar -zxf jdk-11.0.8_linux-x64_bin.tar.gz
  14. #删除压缩文件
  15. rm -f apache-maven-3.6.2-bin.tar.gz
  16. rm -f jdk-11.0.8_linux-x64_bin.tar.gz
  17. #建立软连接
  18. ln -s /opt/centos/apache-maven-3.6.3/bin/mvn /usr/bin/mvn
  19. ln -s /opt/centos/jdk-11.0.8/bin/java /usr/bin/java
  20. #写入path环境变量
  21. echo 'export JAVA_HOME=/opt/centos/jdk-11.0.8
  22. export M2_HOME=/opt/centos/apache-maven-3.6.3
  23. export JRE_HOME=${JAVA_HOME}/jre
  24. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  25. export PATH=${JAVA_HOME}/bin:$PATH:$M2_HOME/bin'>>/root/.bashrc
  26. mkdir -p /data/maven/repo
  27. chmod +x /data/maven/repo
  28. settings.xml /usr/local/apache-maven/conf/settings.xml
  29. cp settings.xml /opt/centos/apache-maven-3.6.3/conf/settings.xml
  30. #安装which,防止mvn启动报错
  31. yum install which
  32. #退出容器
  33. exit
  34. #保存容器
  35. docker commit 427e2bbd8655 my-centos:latest

发表评论

表情:
评论列表 (有 0 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读