Kubeadm 安装 kubernetes

Kubeadm 安装 kubernetes

前言

kudeadm

Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践.

kubernetes v1.17.0

kubernetes, 简称K8s, 是用8代替8个字符"ubernete"而成的缩写. Kubernetes 脱胎于 Google 的 Borg 系统,是一个功能强大的容器编排系统. 是一个全新的基于容器技术的分布式架构领先方案. 目的是实现了资源管理的自动化和跨多个数据中心的资源利用率的最大化. 能够节省至少30% 的开发成本及后期的运维成本. Kubernetes 及其整个生态系统(工具、模块、插件等)均使用 Go 语言编写.

参考: https://cloud.tencent.com/developer/article/1512662

快速搭建一个k8s系统

系统要求

  • 至少双核
  • 内存至少4G
  • 服务器版本大于3.10

初始化安装环境

  1. 检测系统核数: grep -c ‘processor’ /proc/cpuinfo

  2. 查看系统内核版本, 需要升级的话升级一下系统内核.

    # 查看系统版本
    uname -r
    
    # 升级系统内核版本
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
    
    # 查看当前可用版本
    yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
    
    # 安装最新版内核
    yum --enablerepo=elrepo-kernel install kernel-ml -y
    
    # 设置grab2
    sudo awk -F\' '$1=="menuentry " {
          
          print i++ " : " $2}' /etc/grub2.cfg
    sudo grub2-set-default 0
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # 重启
    reboot
    
  3. 设置服务名称

    # master 节点做下面操作
    hostnamectl set-hostname master
    
    # node 节点做下面操作
    hostnamectl set-hostname node1 | node2 ...
    
  4. 设置域名映射

    # master 节点做下面操作
    echo "${ip} master" >> /etc/hosts
    
    # node 节点做下面操作
    echo "${ip} node1" >> /etc/hosts
    
  5. 关闭防火墙、selinux 和 swap

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    swapoff -a
    sed -i 's/.*swap.*/#&/' /etc/fstab
    
  6. 配置内核参数,将桥接的IPv4流量传递到iptables的链

    cp ./config/k8s.conf /etc/sysctl.d/
    echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
    
  7. 配置国内 yum 源

    yum install -y wget
    mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
    yum clean all && yum makecache
    
    # 配置 kubernetes 源
    cp ./config/kubernetes.repo /etc/yum.repos.d/
    
    # 配置 docker 源
    cp ./config/docker-ce.repo /etc/yum.repos.d/
    

安装节点

安装docker

# 卸载已有的docker相关服务
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 安装依赖
sudo yum -y install yum-utils device-mapper-persistent-data lvm2
# 设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装docker-ce
sudo yum -y install docker-ce docker-ce-cli containerd.io
# 列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
yum list docker-ce --showduplicates | sort -r
# 安装docker
sudo yum install -y docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io
# 复制配置
mkdir -p /etc/docker
cp ./config/daemon.json /etc/docker

# 启动
sudo systemctl start docker
# 开机自启动
systemctl enable docker

安装kubeadm & kubelet & kubectl节点

# 这里指定一下版本号, k8s 差不多每隔 4个月迭代一次版本, 如果想安装最新的, 可执行这条指令: yum install -y kubelet kubeadm kubectl, 同时也要注意一下, dashboard 也要安装对应版本
yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
systemctl enable kubelet

安装master节点

  1. 集群初始化

    host_ip=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}'`
    kubeadm init --kubernetes-version=1.17.0 \
    				--apiserver-advertise-address=${host_ip} \
    				--image-repository registry.aliyuncs.com/google_containers \
    				--service-cidr=10.1.0.0/16 \
    				--pod-network-cidr=10.244.0.0/16
    

    这里有一个小技巧: 主节点 ip 最好不和物理机 ip 强绑定, 由于先安装了docker, 可以使用docker0 的默认ip: 172.17.0.1, 后期如果做集群迁移的话只要改变物理机 ip 就可以了

  2. 配置kubectl工具

    # 不配置的话 kubectl 会没权限
    mkdir -p /root/.kube
    cp /etc/kubernetes/admin.conf /root/.kube/config
    
  3. 部署flannel网络

    kubectl apply -f ./config/kube-flannel.yml
    
  4. 部署dashboard (1.17 版本的k8s 对应 dashboard:v2.0.0-beta8; 1.16 版本的k8s 对应 dashboard:v2.0.0-beta6)

    1. 创建命名空间

      kubectl  create namespace kubernetes-dashboar
      
    2. 生成证书

      host_ip=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}'`
      mkdir $HOME/certs && cd $HOME/certs
      #生成证书
      openssl genrsa -out tls.key 2048 
      openssl req -new -out tls.csr -key tls.key -subj '/CN=${host_ip}'
      openssl x509 -req -in tls.csr -signkey tls.key -out tls.crt 
      kubectl create secret generic kubernetes-dashboard-certs --from-file=tls.key --from-file=tls.crt -n kubernetes-dashboard
      cd -
      
    3. 创建用户

      kubectl create -f ./config/admin-dashboard1.yaml
      # 查看token
      admin_token=`kubectl get secrets -n kube-system | grep admin-user | awk '{print $1}'`
      kubectl describe secrets ${admin_token} -n kube-system
      

      (稍等一会容器全部启起来后, 访问 https://${host_ip}:30001,并通过 token的方式访问界面 )

修改默认端口号

k8s 默认容器端口号范围是:30000~32767.

sed -i '24i\ \ \ \ \- --service-node-port-range=1-65535' /etc/kubernetes/manifests/kube-apiserver.yaml

安装node节点

# 到master节点, 输入一下指令,查看加入集群的指令
kubeadm token create --print-join-command

# 然后到 node 节点输入该集群指令
kubeadm join 192.168.9.51:6443 --token m2csqd.xn7p6u9sg6s9hrgv     --discovery-token-ca-cert-hash sha256:3ce27a68518c46ee8ec2fb860328228092c4c60dc45c4859f74b98fd3439b1e9

安装监控组件

kubernetes使用metrics-server提供节点及pod级别的资源监控. Kubernetes从1.8版本开始,CPU、内存等资源的metrics信息可以通过 Metrics API来获取, heapster已经不在维护,转由metrics-server 替代,没安装metrics-server pod命令和自动调度不能正常工作

  • 下载代码

    git clone https://github.com/kubernetes-incubator/metrics-server

  • 修改deploy/1.8+/metrics-server-deployment.yaml文件

    # 想要查看每一个 pod 所占用的 cpu 资源和 内存资源, 需要安装监控组件
    # 修改两个地方, 一个是镜像地址改为: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
    # 第二个是添加参数
    #- --logtostderr
    #- --kubelet-insecure-tls
    #- --kubelet-preferred-address-types=InternalIP
    # eg:
          containers:
          - name: metrics-server
            image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
            imagePullPolicy: IfNotPresent
            args:
              - --cert-dir=/tmp
              - --secure-port=4443
              - --logtostderr
              - --kubelet-insecure-tls
              - --kubelet-preferred-address-types=InternalIP
    
  • 安装监控组件

    # metrics-server文件夹下, 有这五个文件: aggregated-metrics-reader.yaml,auth-delegator.yaml,auth-reader.yaml,metrics-apiservice.yaml,metrics-server-deployment.yaml,metrics-server-service.yaml,resource-reader.yaml
    kubectl create -f ./metrics-server 
    

常见安装错误

  • 因系统内核版本太低导致安装异常.

    – 升级系统内核版本

  • dashboard 登录后报很多forbbien的错误,

    – 有可能是高版本的 k8s 装了 低版本的 dashboard, 解决办法是装和k8s版本相对应的dashboard

    k8s 版本 dashboard版本
    v1.17.0 dashboard:v2.0.0-beta8
    v1.16.0 dashboard:v2.0.0-beta6

猜你喜欢

转载自blog.csdn.net/zjhcxdj/article/details/108626577