本机安装k8s

659 阅读3分钟

主机配置(centos系统)

主机类型主机Kubernetes版本配置
master192.168.0.101v1.204C4G
node192.168.0.102v1.204C2G

基础环境配置

  • 配置yum源

    • 不建议使用CentOS 7 自带的yum源,因为安装软件和依赖时会非常慢甚至超时失败。
    • 使用阿里云源替换:
      yum install -y wget
      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
      yum makecache
      
  • 关闭防火墙

    • systemctl stop firewalld & systemctl disable firewalld image.png
  • 关闭Swap

    类似ElasticSearch集群,在安装K8S集群时,Linux的Swap内存交换机制是一定要关闭的,否则会因为内存交换而影响性能以及稳定性。

    • 执行swapoff -a可临时关闭,但系统重启后恢复
    • 编辑/etc/fstab,注释掉包含swap的那一行即可,重启后可永久关闭 image.png
    • 或直接执行:sed -i '/ swap / s/^/#/' /etc/fstab
  • 修改hostname

    • master:vi /etc/hostname
      • 修改为master
    • node:vim /etc/hostname
  • 修改host:vim /etc/hosts

    • 192.168.56.101 master
    • 192.168.56.102 node

安装docker(使用阿里云安装:文档地址)

  • curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun image.png
  • 配置docker镜像加速
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://9ep6m3b8.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  • 开机启动
    • systemctl enable docker.service
  • 在安装k8s之前备份一下虚拟机,以便安装失败直接重新替换虚拟机

命令补全

  • 安装bash-completion
    • yum -y install bash-completion
  • 加载:bash-completion
    • source /etc/profile.d/bash_completion.sh

安装k8s

  • 添加k8s国内源
    cat>>/etc/yum.repos.d/kubrenetes.repo<<EOF
    [kubernetes]
    name=Kubernetes Repo
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
    EOF
    
  • 安装K8s所需要的3个组件
    • yum install -y kubeadm kubelet kubectl
    • kubeadm:安装工具,使所有的组件都会以容器的方式运行
    • kubectl:客户端连接K8S API工具
    • kubelet:运行在node节点,用来启动容器的工具
  • 启动kubelet
    • 启动kubelet并设置开机启动
      • systemctl enable kubelet && systemctl start kubelet
  • kubelet命令补全
    • echo "source <(kubectl completion bash)" >> ~/.bash_profile
    • source ~/.bash_profile
  • 内核参数修改
    • sysctl net.bridge.bridge-nf-call-iptables=1
    • sysctl net.bridge.bridge-nf-call-ip6tables=1

下载镜像

  • 版本查看:yum list kubelet --showduplicates | sort -r
  • 选择当前最高版本:1.20.5-0
  • 镜像下载脚本:
    • vim images.sh
    #!/bin/bash
    url=registry.cn-hangzhou.aliyuncs.com/google_containers
    version=v1.20.5
    images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
    for imagename in ${images[@]} ; do
      docker pull $url/$imagename
      docker tag $url/$imagename k8s.gcr.io/$imagename
      docker rmi -f $url/$imagename
    done
    
  • 执行脚本,下载镜像:chmod u+x images.sh && ./images.sh
  • 下载coredns镜像(版本可以根据kubeadm init提示的版本下载)
    • docker pull coredns/coredns:1.8.0
    • docker tag coredns/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
  • 查看docker镜像:docker images image.png

master节点安装

  • 初始化master
    • 初始化:kubeadm init --apiserver-advertise-address 192.168.56.101 --kubernetes-version v1.20.5 --pod-network-cidr=10.244.0.0/16

      pod-network-cidr指定Pod网络的范围,这里使用flannel网络方案。 image.png 记住里面的join命令,可以在node节点上执行,用于加入集群

    • 加载环境变量
      • echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
      • source ~/.bash_profile
    • 查看系统pods,确认是否安装成功
      • kubectl get pods -A image.png
  • 安装pod网络
    • kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml image.png
  • master节点配置

    taint:污点的意思。如果一个节点被打上了污点,那么pod是不允许运行在这个节点上面的

    • 删除master节点默认污点
      • 查看污点:kubectl describe node master|grep -i taints
      • 删除默认污点:kubectl taint nodes master node-role.kubernetes.io/master-
    • 污点机制
      • 语法:
        kubectl taint node [node] key=value[effect]   
         其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
          NoSchedule: 一定不能被调度
          PreferNoSchedule: 尽量不要调度
          NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
        
      • 打污点:
        • kubectl taint node master key1=value1:NoSchedule
        • kubectl describe node master|grep -i taints
      • 删除污点:
        • kubectl taint nodes master key1-

Node节点安装

  • 加入集群
    • 若在master节点init时未记录join命令可以采用一下步骤重新获取令牌和命令(在master节点执行)
      • 查看令牌
        • kubeadm token list image.png
      • 如果令牌过期,重新生成令牌
        • kubeadm token create image.png
      • 生成新的加密串
        • openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' image.png
    • 加入集群(node节点执行)
      • kubeadm join 192.168.56.101:6443 --token z9p9v7.7apn89fdg6f49gwf --discovery-token-ca-cert-hash sha256:b2f7dbf2f479c7096b2c09d499f77ef64399d15c757f4f24f443c0fbbb2a3f8d image.png
    • 在master节点执行命令查看节点:kubectl get nodes image.png

安装kuboard

  • 官网:www.kuboard.cn/
  • 安装文档:www.kuboard.cn/install/v3/…
  • 安装步骤:
    • 启一台新的虚拟机:192.168.56.103
    • 按照上面的步骤安装docker
    • 安装kuboard
      sudo docker run -d \
        --restart=unless-stopped \
        --name=kuboard \
        -p 10080:80/tcp \
        -p 10081:10081/udp \
        -p 10081:10081/tcp \
        -e KUBOARD_ENDPOINT="http://192.168.56.103:10080" \
        -e KUBOARD_AGENT_SERVER_UDP_PORT="10081" \
        -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
        -v /root/kuboard-data:/data \
        eipwork/kuboard:v3
      
  • 访问:http://192.168.56.103:10080
    • 账号密码:admin/Kuboard123
  • 添加集群
    • 输入集群基本信息 image.png
    • 执行导入命令(在master节点执行) image.png
    • 执行命令: image.png
    • 查看导入结果: image.png

安装成功