• Kubernetes部署+kubesphere管理平台安装


    Kubernetes官网kubesphere官网

             不论是Kubernetes官网还是找的其它部署步骤,基本都是推荐搭建集群的方式,是为了实现高可用.....等等,这样一来至少需要两台或三台的服务器来搭建,这样对我们的成本也是非常大的,所以我就尝试了用一台机器来部署,下面是具体的流程; 

    一、Kubernetes搭建

     1、环境准备

    Centos7操作系统(2核 + 5G内存 + 50G空间)

    因为还要安装kubesphere管理工具,所以内存和空间尽量要大一点

    2、安装方式

    k8s的常用安装方式有两种(本文是通过kubeadm的方式):

    方式优势缺点
    kubeadm简单、快速无法更好的理解k8s各个组件之间的关系
    二进制包安装繁琐、复杂可能更好的理解k8s集群组件的关系

     3、配置机器的host文件

    vim /etc/hosts

    #添加内容

    192.168.1.16 k8s-master

    可以使用 ping k8s-master 看是否可以ping通

     4、禁用防火墙

    #docker会产生很多端口规则,为了引起不必要的麻烦,自己关闭掉(反正这个环境只是学习使用的,生成环境不要这么做)
    systemctl stop firewalld
    systemctl disable firewalld
    systemctl stop iptables
    systemctl disable iptables

     5、禁用linux系统的安全服务selinux

    # 永久关闭
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    # 临时关闭
    setenforce 0
    #或者使用 vim /etc/selinux/config

    6、禁用swap分区

    #作用是在物理内存使用完之后虚拟磁盘空间作为内存使用,开启此会产生性能影响,在搭建k8s集群的时候如果开启的话还需要特别说明

    # 临时
    swapoff -a 
    # 永久关闭
    sed -ri 's/.*swap.*/#&/' /etc/fstab

    7、修改linux内核参数

    #修改linux内核参数,添加网桥过滤和地址转发功能
    vi /etc/sysctl.d/kubernetes.conf
    # 添加如下配置
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1

    #  重新加载配置
    sysctl -p
    #加载网桥过滤模块
    modprobe br_netfilter
    # 查看网桥过滤模块是否加载成功
    lsmod|grep br_netfilter

    8、配置ipvs功能

    #安装ipset、ipvsadm
    yum -y install ipset ipvsadm
    #添加需要加载的模块,写入到脚本文件中
    vi /etc/sysconfig/modules/ipvs.modules
    #内容如下
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4

    #为脚本文件添加执行权限
    chmod +x /etc/sysconfig/modules/ipvs.modules
    #执行脚本文件
    /bin/bash /etc/sysconfig/modules/ipvs.modules
    #查询对应模块是否加载成功
    lsmod |grep -e ip_vs -e nf_conntrack_ipv4

    #最后重启下服务器
    reboot

     9、时间同步

    #时间最好也做下更新
    yum install ntpdate -y
    ntpdate time.windows.com

    10、安装docker

    可参考之前的文章介绍:

    docker安装
    注意更改下/etc/docker/daemon.json文件:

    1. {
    2. "log-driver":"json-file",
    3. "log-opts":{
    4. "max-size":"500m",
    5. "max-file":"3"
    6. },
    7. "exec-opts":[
    8. "native.cgroupdriver=systemd"
    9. ],
    10. "registry-mirrors":[
    11. "https://kfwkfulq.mirror.aliyuncs.com",
    12. "https://2lqq34jg.mirror.aliyuncs.com",
    13. "https://pee6w651.mirror.aliyuncs.com",
    14. "https://registry.docker-cn.com",
    15. "http://hub-mirror.c.163.com",
    16. "https://39dvdikp.mirror.aliyuncs.com"
    17. ]
    18. }

    11、添加kubernetes软件源

    cat > /etc/yum.repos.d/kubernetes.repo << EOF
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF

    12、安装kubeadm,kubelet和kubectl

    由于版本更新频繁,这里指定版本号部署:
    sudo yum install -y kubelet-1.23.8 kubeadm-1.23.8 kubectl-1.23.8

    # 设置开机启动
    systemctl enable kubelet

    13、kubeadm初始化

    kubeadm init \
    --apiserver-advertise-address=192.168.1.16 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.23.8 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16 \
    --ignore-preflight-errors=all  \
    --v=6

     使用 kubectl vesion 可查看安装的kubernetes的版本:

     看到上图所示代表安装成功,然后按顺序执行如下命令:
     

    1. mkdir -p $HOME/.kube
    2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    3. sudo chown $(id -u):$(id -g) $HOME/.kube/config

    14、安装网络组件

    在没有安装前看到有一些状态是不正常的,待安装网络组件后会恢复正常:
    kubectl apply -f https://docs.projectcalico.org/v3.23/manifests/calico.yaml

     12、简易安装Nginx进行测试

    kubectl create deployment nginx --image=nginx
    kubectl expose deployment nginx --port=80 --type=NodePort
    kubectl get pod,svc 
    #在 web 浏览器输入以下地址,会返回 nginx 欢迎界面
    http://192.168.1.16:32409 (32409 该端口为kubectl get pod,svc命令获取)

    遇到错误:使用kubectl get pod发现状态一直为Pending,这是因为k8s的master节点默认是不能跑pod任务的,所以需要解除限制,这样就不需要部署集群了, 但还是建议条件允许的情况下以集群的方式进行部署

    # 将master节点设为可以调度
    kubectl taint nodes --all node-role.kubernetes.io/master-
     
    # 如果需要设为不允许调度
    # kubectl taint nodes master node-role.kubernetes.io/master=:NoSchedule
    # 污点可选参数
          NoSchedule: 一定不能被调度
          PreferNoSchedule: 尽量不要调度
          NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod

    再次查看发现状态已恢复:

     

    二、Kubernetes 可视化管理界面安装

            kubesphere明确说明基于k8s安装需要配置DefaultStorageclass,我这里是搭建基于NFS的DefaultStorageclass


    1、安装nfs必要的工具

    # 安装必要软件
    yum -y install nfs-utils rpcbind
    # 设置开机自启动
    systemctl enable nfs
    systemctl enable rpcbind

    # 启动nfs
    systemctl start rpcbind
    systemctl start nfs

    # 配置nfs
    vim /etc/exports
    /work/k8s/nfsdata 192.168.1.0/24(rw,no_root_squash,no_all_squash,sync)
    # 启动nfs
    systemctl restart nfs

     2、基于NFS创建Storageclass

    这里需要三个文件 class.yaml deployment.yaml rbac.yaml
    创建文件夹统一管理 :mkdir /home/k8s/yml/nfs-client
    class.yaml文件:

    1. apiVersion: storage.k8s.io/v1
    2. kind: StorageClass
    3. metadata:
    4. annotations:
    5. storageclass.kubernetes.io/is-default-class: "true"
    6. name: managed-nfs-storage
    7. provisioner: fuseim.pri/ifs
    8. parameters:
    9. archiveOnDelete: "false"

     deployment.yaml文件(注意更换文件中的IP和nfs文件目录):

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: nfs-client-provisioner
    5. labels:
    6. app: nfs-client-provisioner
    7. # replace with namespace where provisioner is deployed
    8. namespace: default
    9. spec:
    10. replicas: 1
    11. strategy:
    12. type: Recreate
    13. selector:
    14. matchLabels:
    15. app: nfs-client-provisioner
    16. template:
    17. metadata:
    18. labels:
    19. app: nfs-client-provisioner
    20. spec:
    21. serviceAccountName: nfs-client-provisioner
    22. containers:
    23. - name: nfs-client-provisioner
    24. image: quay.io/external_storage/nfs-client-provisioner:latest
    25. volumeMounts:
    26. - name: nfs-client-root
    27. mountPath: /persistentvolumes
    28. env:
    29. - name: PROVISIONER_NAME
    30. value: fuseim.pri/ifs
    31. - name: NFS_SERVER
    32. value: 192.168.1.16
    33. - name: NFS_PATH
    34. value: /work/k8s/nfsdata
    35. volumes:
    36. - name: nfs-client-root
    37. nfs:
    38. server: 192.168.1.16
    39. path: /work/k8s/nfsdata


    rbac.yaml文件:

    1. apiVersion: v1
    2. kind: ServiceAccount
    3. metadata:
    4. name: nfs-client-provisioner
    5. # replace with namespace where provisioner is deployed
    6. namespace: default
    7. ---
    8. kind: ClusterRole
    9. apiVersion: rbac.authorization.k8s.io/v1
    10. metadata:
    11. name: nfs-client-provisioner-runner
    12. rules:
    13. - apiGroups: [""]
    14. resources: ["persistentvolumes"]
    15. verbs: ["get", "list", "watch", "create", "delete"]
    16. - apiGroups: [""]
    17. resources: ["persistentvolumeclaims"]
    18. verbs: ["get", "list", "watch", "update"]
    19. - apiGroups: ["storage.k8s.io"]
    20. resources: ["storageclasses"]
    21. verbs: ["get", "list", "watch"]
    22. - apiGroups: [""]
    23. resources: ["events"]
    24. verbs: ["create", "update", "patch"]
    25. ---
    26. kind: ClusterRoleBinding
    27. apiVersion: rbac.authorization.k8s.io/v1
    28. metadata:
    29. name: run-nfs-client-provisioner
    30. subjects:
    31. - kind: ServiceAccount
    32. name: nfs-client-provisioner
    33. # replace with namespace where provisioner is deployed
    34. namespace: default
    35. roleRef:
    36. kind: ClusterRole
    37. name: nfs-client-provisioner-runner
    38. apiGroup: rbac.authorization.k8s.io
    39. ---
    40. kind: Role
    41. apiVersion: rbac.authorization.k8s.io/v1
    42. metadata:
    43. name: leader-locking-nfs-client-provisioner
    44. # replace with namespace where provisioner is deployed
    45. namespace: default
    46. rules:
    47. - apiGroups: [""]
    48. resources: ["endpoints"]
    49. verbs: ["get", "list", "watch", "create", "update", "patch"]
    50. ---
    51. kind: RoleBinding
    52. apiVersion: rbac.authorization.k8s.io/v1
    53. metadata:
    54. name: leader-locking-nfs-client-provisioner
    55. # replace with namespace where provisioner is deployed
    56. namespace: default
    57. subjects:
    58. - kind: ServiceAccount
    59. name: nfs-client-provisioner
    60. # replace with namespace where provisioner is deployed
    61. namespace: default
    62. roleRef:
    63. kind: Role
    64. name: leader-locking-nfs-client-provisioner
    65. apiGroup: rbac.authorization.k8s.io

    执行部署:

    kubectl apply -f class.yaml
    kubectl apply -f deployment.yaml
    kubectl apply -f rbac.yaml

    效果如图:

    3、安装 Kubersphere

    # 执行以下命令安装
    kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.2/kubesphere-installer.yaml
       
    kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.2/cluster-configuration.yaml
     

    # 执行以下命令检查安装日志 过程稍微有点长 最后出现文章开头的内容就说明安装成功
    kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f


    如图代表安装成功;在浏览器中出入日志中提示的访问地址即可


    4、Kubersphere平台访问效果图

     

     

     

     此时我们使用docker ps查看docker已经运行了好多容器:


     

            后续将会补充通过Kubersphere平台进行部署 Nginx、Rabbitmq、Mysql等相关服务 以及 部署SpringBoot项目等。

  • 相关阅读:
    【LeetCode每日一题】——410.分割数组的最大值
    Java练习题2022-3
    C++之动态数组(Vector)中运用各类迭代器
    [附源码]java毕业设计期刊在线投稿平台
    Appium 环境搭建安装 java sdk 和 Android SDK
    服务器百万并发的原理与实现
    Java8 Collectors.toMap() 的使用
    岩土工程安全监测中振弦采集仪连接振弦传感器时注意事项
    【PG】postgreSQL参数解释二 WRITE-AHEAD LOG部分
    华为配置WDS手拉手业务示例
  • 原文地址:https://blog.csdn.net/qq_40083897/article/details/130910825