(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
原文地址:https://www.cnblogs.com/Binggo30/p/11444547.html
时间: 2024-10-10 00:07:31