使用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的主要内容,如果未能解决你的问题,请参考以下文章