centos7.6 安装k8s,k8s部署中间件、应用

K8S介绍

  • CentOS7版本部署K8S单机版(本次部署基于XX云环境部署,当然也能直接购买云厂商容器服务)

安装建议

  • 第一次用云环境,安全方面实属萌新,在第一次部署之后,遭到了挖矿攻击。所以重置了云服务器,吸取教训从0开始部署k8s单机版。
  • 安全方面,建议:首先建议走内网部署,所有的操作都基于内网操作(大神忽略)。

资源配置

  • CPU建议:资源配置建议2核,甚至更多
  • 内存建议:4G甚至更多
  • 硬盘建议:30G

安全准备(云机器推荐)

  • 为了能在整个过程比较处于比较安全的环境下,在云服务器部署k8s,中间会涉及到部分端口开放到公网中。非程序入口端口(非80等)暴露在公网中是不安全的。
  • 安全方面笔者推荐:第一修改连接云服务器的默认端口22,第二笔者部署使用openVpn,只有笔者的本地ip能使用此vpn连接云服务器与操作云服务器,并且VPN整个部署流程傻瓜式部署。

1. 修改Linux云机器默认ssh端口,具体操作如下:

  • 使用超级管理员登录云服务(建议登录云服务器使用秘钥方式,而不是密码登录方式),云服务器具体步骤看云厂商秘钥登录步骤,本地虚机参考文章Linux安全之SSH 密钥创建及密钥登录

  • 进入目录/etc/ssh,vim sshd_config。修改port为你要修改的端口,保存退出。

  • 重启ssh 命令: service sshd restart,然后查看netstat -ltnp 查看 监听端口及类型。
    image

  • 看到上面信息即为修改成功

2. 安装部署OpenVpn

  • 第一步下载sh脚本文件(地址:https://raw.githubusercontent.com/Nyr/openvpn-install/master/openvpn-install.sh
    image

    注意:(云机器可以直接wget,不能就打开浏览器,直接从页面copy,copy的时候需要注意语法问题,window的语法到linux会使用不了,需要转变成linux语法)  ,不然window语法有可能会出现error例如:syntax error near unexpected token 'elif'错误

  • 云服务器直接在wget所在目录执行脚本,本地copy方式需要将脚本上传到云服务器的文件目录中,然后执行sh openvpn-install.sh命令。如果执行命令没反应说明执行失败,请检查是否出现了语法问题或者查看执行结果信息显示。

    sh open-install.sh
    
  • 执行脚本,执行脚本会不断的弹出配置选择信息,如下所示

    1. 第一个会弹出选择ipv4的框选择,如果你只有一个ipv4地址,脚本只会给你罗列一个ip,你只需要回车即可。但是如果你存在其他可能存在的ipv4选择,例如:docker网络地址,则他会把这些地址全部罗列出来,你需要选择eth0地址,然后回车。

    2. ipv6地址选择,这默认是公网地址(个人理解),由于我用的是云机器,所以默认显示了云服务器的外网地址,此时直接回车即可。

    3. protocol选择,有两个选项:TCP和UDP,选择UDP方式。

    4. Select a DNS server for the clients。你要选择哪个dns解析服务,我选择了1,同机器本地配置一样。

    5. 接下来是端口选择,填写一个端口,此端口是VPN的服务端口。注意:云机器,此端口需要对外开放,以便开发人员进行连接,如果是个人开发人员,建议进一步限制访问此端口的Ip,只有个人的ip能连接上此端口。

    6. 填写本次安装要生成的vpn配置文件名字,填写这个vpn client的名字,以便生成vpn连接配置文件。回车继续,接下来净净等待安装完成,安装完成后,会在root根目录下形成vpn连接配置文件。

    7. 如果需要添加新的人员能够连接此云服务器,只需要再次执行sh openvpn-install.sh脚本。此时再执行这脚本,他就变成了一个部署管理器,你可以再添加一个新的client,移除一个存在的clietn,甚至是卸载此vpn软件。如下图所示:
      image

    8. 拿到.ovpn结尾的文件后,本地安装vpn软件 ( vpn下载 提取码:ky77),安装方式傻瓜式安装,全部下一步即可。最后打开软件,右键该软件选择导入配置文件。导入成功后选择导入的配置文件选择连接即可。
      image


部署K8S单机版

安装准备

  • 一台主机:10.0.4.6 ,配置 2C 4g

  • 更改节点hostname

    hostnamectl set-hostname k8s-master
    

    image

  • 查看修改后的hostname

    hostname
    

    image

  • 所有节点关闭防火墙

    systemctl stop firewalld 
    
    systemctl disable firewalld
    
  • 关闭selinux

    sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    
    setenforce 0
    
  • 关闭swap

    • 临时关闭
    cat /etc/fstab #注释到swap那一行
    
    • 永久关闭
    sed -i 's/.*swap.*/#&/g' /etc/fstab
    
  • 节点添加主机名与ip的对应关系

    cat >> /etc/hosts <<EOF 10.0.4.6 k8s-master  EOF
    
  • 将桥接的IPv4流量传递到iptables的链

    cat  /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1  net.bridge.bridge-nf-call-iptables = 1 EOF
    
    sysctl --system
    
  • 安装docker

    yum -y install wget
    
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    yum -y install docker-ce-19.03.12-3.el7
    
  • 启动docker,并设置docker开机自启

    systemctl start docker
    
    systemctl enable docker
    
  • 配置加速,并设置驱动

    cat > /etc/docker/daemon.json <<EOF
    { "registry-mirrors": ["https://6ze43vnb.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver":     
    "overlay2"}
    EOF
    
  • 加载daemon并重启docker

    systemctl daemon-reload
    
    systemctl restart docker
    
  • 添加阿里云YUM源

    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
    
  • 安装kubeadm,kubelet和kubectl

    • 这里指定了版本号,若需要其他版本的可自行更改
    yum install -y kubelet-1.18.6 kubeadm-1.18.6 kubectl-1.18.6
    
    systemctl enable kubelet
    
  • 下载k8s所需要的容器

    • 查看所需要的容器
    kubeadm config images list
    
    • 国外环境:下载所需要的容器
    kubeadm config images pull
    
    • 国内环境:使用阿里云镜像仓库下载(国内环境该命令可不执行,下步骤kubeadm init已经默认为国内环境):
    kubeadm configimages=(
    kube-apiserver:v1.18.6
    kube-controller-manager:v1.18.6
    kube-scheduler:v1.18.6
    kube-proxy:v1.18.6
    pause:3.2
    etcd:3.4.3-0 coredns:1.6.7)
    for imageName in ${images[@]} ; do docker pull registry.cn-        
    hangzhou.aliyuncs.com/google_containers/${imageName} docker tag registry.cn-    
    hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${imageName}done
    
  • 初始化master节点

    • 只在master节点执行,由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址,执行成功以后最后结果会输出
     kubeadm init \
       --apiserver-advertise-address={云服务器内网地址} \
       --image-repository registry.aliyuncs.com/google_containers \
       --kubernetes-version v1.18.6 \
       --service-cidr=10.1.0.0/16 \
       --pod-network-cidr=10.244.0.0/16
    
    • 上述安装成功后执行
    mkdir -p $HOME/.kube
    
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • master搭建成功后可看到如下

    kubeadm join 10.0.4.6:6443 --token uvm8k1.k9qtxugm23vysj8b \
      --discovery-token-ca-cert-hash   
    sha256:5764ff5718add630baefb352d08d9cf9944a4cb1eab571bc82c51c808c9cb49a
    
  • 本次安装属于单机安装,如果集群安装,则在出现上面提示时,使用其他节点(非master)节点输入以上命令,来加入当前k8s集群。

安装Pod网络插件(CNI)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 查看安装状态
kubectl get pods -n kube-system
  • 然后查询出来的状态为为Running才可正常使用

安装kuboard

  • 需要先安装ingress

  • 本次通过上传压缩包方式进行安装

  • 百度网盘 提取码w3n9

  • 执行命令

    kubectl label nodes k8s-master edgenode=true
    
  • 文件下载好后上传至服务器中,创建个目录 将下载的文件都上传。共有3个文件

  • 安装ingress

    kubectl apply -f ingress-deploy.yaml
    
  • 查看安装状态

    kubectl get pod -o wide -n ingress-nginx
    
  • 安装kuboard

    kubectl apply -f&nbsp;kuboard.yaml
    
  • 查看kuboard状态

    kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system
    
  • 安装成功后,获取kuboard管理员token

    echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard- user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
    
  • 当然也能获取只读权限的token

    echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
    
  • 登录kuboard 宿主机内网ip,端口32567,进入页面后输入token,点击登录。

安装Metrics-Server服务

  • 部署这个服务是为了能方便在kuboard中显示每个节点的资源使用情况

  • 下载安装包并解压

    wget  https://github.com/kubernetes-sigs/metrics-server/archive/v0.3.6.tar.gz
    
    tar -zxvf v0.3.6.tar.gz
    
    cd metrics-server-0.3.6/deploy/1.8+/
    
  • 备份配置文件

    copy metrics-server-deployment.yaml metrics-server-deployment.yaml_back
    
  • 软件最外层执行

    kubectl apply -f metrics-server-0.3.6/deploy/1.8+/
    
  • 查看执行状态

    kubectl top node
    
  • 部署成功后等待3-5分钟,再使用kubectl top node命令查看

开发者使用docker,以及添加docker仓库

准备阶段

  • 首先要有一个镜像仓库。可以选择阿里云。新建账号和新建仓库等操作这里不再具体描述。

idea使用docker file打包镜像同时上传至个人镜像仓库步骤

  • docker开放2375端口,安装链接,此步骤需要慎重,由于笔者使用vpn,限制只能本机ip才能正常去操作云服务器。如果不是走笔者推荐的openvpn,不建议使用此步骤!!

  • idea编写dockerfile文件,同时配置docer

  • 云机器登录连接docker仓库

    kubectl create secret docker-registry username --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=yourusername--docker-password=yourpassword --docker-email= "your email" --namespace=you namespace
    
  • idea通过打包好镜像文件,推送到云机器的docker仓库上,再从云机器的docker仓库推送到远端阿里镜像仓库。

kuboard安装中间件

  • k8s使用nfs作为存储技术

  • 云机器安装nfs,安装链接

  • kuboard创建存储pv

kuboard使用helm安装中间件

  • 使用helm是为了能傻瓜式的部署中间件,无需接触docker操作,只需要下载values.yaml配置文件,修改关键配置:如中间件密码信息等、集群每个节点的分片数、资源资源限制大小等。修改完成上传至宿主机,执行helm命令即可一键部署,日常使用helm即可满足。

  • 安装helm,安装链接

使用helm安装redis cluster集群版

  • 进入bitnami站点

  • tab选择kubernetes

  • 搜索redis ,选择点击redis cluster

  • helm添加bitnami源,这里不在描述

  • 找到下载values.yaml的地方,下载这个配置,下载到本地 然后进行基础的修改,如集群的副本数、集群密码等

  • 将values.yaml上传至宿主机,并在上传的当前目录使用helm命令进行安装,安装前需要在kuboard建一个对应的命名空间给redis使用

    helm install myredis -f ./config.yaml bitnami/redis-cluster -n redis
    

学无止境,很多地方 不太了解,所以细节方面会有问题。有什么问题可以私聊我 ,我进行修正。


上文部分内容引用自:kubernetes安装-CentOS7
上文部分内容引用自:k8s 的初步集群安装

posted @ 2021-12-30 17:41  小园丁lfc  阅读(343)  评论(2)    收藏  举报