使用kubeadm安装Kubernetes

Posted binggo30

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用kubeadm安装Kubernetes相关的知识,希望对你有一定的参考价值。

(1)系统基础设置

  • 通过DNS完成各节点的主机名解析,少量时可以使用hosts文件进行解析;

  • 借助于NTP服务设置各节点时间精确同步

  • 关闭各节点iptables和firewalld,并确保禁止开机自启动

  • 各节点禁用SELinux

  • 各节点禁用所有Swap设备

  • 若要使用ipvs模型的proxy,各节点还需要载入ipvs相关的各模块

1.1 设置主机名

每台主机名必须都不一样,并保证所有节点之间可以通过hostname相互访问。

 # 查看主机名
 hostname
 # 修改主机名
 hostnamectl set-hostname HostName
 # 配置hosts文件,使其所有节点之间可以通过hostname相互访问
 vim /etc/hosts
  NodeIP   NodeName
1.2 设置时钟同步
 # 如果节点可直接访问互联网,可直接启动chronyd系统服务,并设置开机自启动
  systemctl start chronyd.service
  systemctl enable chronyd.service
 # 建议使用本地的时间服务器,尤其在节点数量众多时,存在可用的本地时间服务器时,修改节点时间服务器指向相应的主机即可,配置【/etc/chrony.conf】格式如下:
  server CHRONY-ServerName-OR-IP iburst
 #设置时区
    timedatectl list-timezones|grep -i Shanghai
    timedatectl set-timezone Asia/Shanghai
    timedatectl
 ?

 

1.3 安装依赖包
 # 注意jq在EPEL源中
 # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
1.4 关闭防火墙、swap、重置iptables
 # 关闭防火墙
 systemctl stop firewalld && systemctl disable firewalld
 # 重置iptables
 iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
 # 关闭swap
 # kubeadm默认会预先检查当前主机是否禁用了Swap设备,并在未禁用时强制终止部署过程。
 swapoff -a
 sed -i ‘/swap/s/^\(.*\)$/#\1/g‘ /etc/fstab
 # 关闭SELinux
 setenforce 0
 sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g‘ /etc/selinux/config
 # 关闭dnsmasq(否则可能导致docker容器无法解析域名)
 service dnsmasq stop && systemctl disable dnsmasq
1.5 系统参数设置
  cat > /etc/sysctl.d/kubernetes.conf <<EOF
 net.bridge.bridge-nf-call-iptables=1
 net.bridge.bridge-nf-call-ip6tables=1
 net.ipv4.ip_forward=1
 vm.swappiness=0
 vm.overcommit_memory=1
 vm.panic_on_oom=0
 fs.inotify.max_user_watches=89100
 EOF
 ## 生效文件
 sysctl -p /etc/sysctl.d/kubernetes.conf
 ## 查看
 sysctl -a |grep bridge

 

(2) 安装docker(所有节点)

根据kubernetes对docker版本的兼容测试情况选择对应docker版本。

 wget -O /etc/yum.repos.d/docker.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 yum install docker-ce
 systemctl enable docker
 ?
 # 配置iptables转发策略默认放行
  # docker自1.13版起会自动设置iptables的FORWARD默认策略为DROP,这可能会影响kubernetes集群依赖的报文转发功能。
 vim /usr/lib/systemd/system/docker.service
  # 在【Service】标签下
  Environment=“HTTPS_PROXY=http://www.ik8s.io:10070”
  Environment=“NO_PROXY=127.0.0.0/8,192.168.141.0/24”
  ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
 # 重启生效
 systemctl daemon-reload
 systemctl start docker
 docker info

 

(3)安装必要工具(所有节点)

工具说明:

  • kubeadm:部署集群用的命令

  • kubelet:在集群中每台机器上都要运行的组件,负责管理Pod、容器的生命周期

  • kubectl:集群管理工具(可选,只要在控制集群的节点上安装即可)

 # 配置yum源
  cat <<EOF > /etc/yum.repos.d/kubernetes.repo
 [kubernetes]
 name=Kubernetes
 baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
 enabled=1
 gpgcheck=0
 repo_gpgcheck=0
 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
 EOF
 ?
 # 安装工具
 yum list kubeadm --showduplicates | sort -r
 #     注:--showduplicates 表示查看当前支持的版本
 # 安装指定版本
 version=‘1.14.5-0‘
 yum install -y kubeadm-$version kubelet-$version kubectl-$version  --disableexcludes=kubernetes
 # 配置kubelet,若未禁用Swap设备,则需要编辑kubelet的配置文件/etc/sysconfig/kubelt,设置其忽略Swap启用的状态错误。
  KUBELET_EXTRA_ARGS=“--fail-swap-on=false”
 ?
 # 设置kubelet的cgroupdriver(kubelet的cgroupdriver默认为systemd,如果上面没有设置docker的exec-opts为systemd,这里就需要将kubelet的设置为cgroupfs)
 sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
 ?
 # 启动kubelet
 systemctl enable kubelet && systemctl start kubelet

 

kubeadm的相关命令
 init    # 初始化集群
  --image-repository string ## 指定初始化集群时镜像仓库地址
 join # 加入集群
 reset # 重置集群
 config # 显示初始化集群相关默认配置
  kubeadm config init-defaults # 显示初始化集群模式配置
  kubeadm config images list | pull   # 显示/拉取初始化集群相关镜像
  kubeadm config upload from-file # 由配置文件上传到集群中生成ConfigMap
  kubeadm config upload from-flags # 由配置参数生成ConfigMap
  kubeadm config view # 查看当前集群中的配置值
  kubeadm config print init-defaults # 输出 kubeadm init 默认参数文件的内容
  kubeadm config print join-defaults # 输出 kubeadm join 默认参数文件的内容
  kubeadm config migrate # 在新旧版本之间进行配置转换
  kubeadm config images list   # 列出所需的镜像列表
  kubeadm config images pull   # 拉取镜像到本地

说明:kubeadm init命令支持两种初始化方式,一种是通过命令行选项传递关键的部署设定,另一种是基于yaml格式的专用配置文件,后一种允许用户自定义各个部署参数。

初始化集群
 # 可在执行kubeadm init之前提前拉取相关镜像
 kubeadm config images list
 kubeadm config images pull
 kubeadm init --kubernetes-version="v1.14.5" --pod-network-cidr="10.244.0.0/16" --ignore-preflight-errors=Swap  --dry-run  --experimental-upload-certs
 ?
 # 说明
 #     kubernetes-version 指定要部署的kubernetes程序版本,需要与当前的kubeadm支持的版本保持一致
 #   pod-network-cidr 指定Pod网络网段,需跟网络插件一致
 #   service-cidr   指定集群服务地址
 # 添加 --experimental-upload-certs 参数可以在后续执行加入节点时自动分发证书文件
配置使用kubectl

kubectl是kube-apiserver的命令行客户端程序,实现了除系统部署之外的几乎全部的集群管理操作,是kubernetes管理员使用最多的命令之一。kubectl需经由API Server认证及授权后方能执行相应的管理操作。kubeadm部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由kubectl通过默认的“$HOME/.kube/config”的路径进行加载。当然,用户也可在kubectl命令上使用--kubeconfig选项指定一个别的位置。

 mkdir -p $HOME/.kube
 cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 # 检查集群组件状态
 kubectl get componentstatus
 ?
 # 查看当前kubectl配置
 kubectl config view
部署网络插件

Kubernetes系统上Pod网络的实现依赖于第三方插件进行。常用有flannel、calico、canal和kube-router

 # flannel
 # github地址:github.com/coreos/flannel
 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安装Node
 # 先进行环境基础配置、
 yum install kubelet kubeadm
 kubeadm join XXXX
 # 安装flannel
 kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
 ?
 # 现在node也使用kubectl
 mkdir ~/.kube
 cp Master:/etc/kubernetes/admin.conf Node:/root/.kube/config

 

以上是关于使用kubeadm安装Kubernetes的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes— 记一次用kubeadm搭建kubernetes v1.9.0集群

使用kubeadm离线下载k8s安装镜像

使用kubeadm安装k8s集群故障处理三则

使用kubeadm安装k8s1.26.0笔记2

centos7 kubeadm部署单机k8s

使用kubeadm安装kubernetes v1.14.1