利用 kubeadm 简单搭建k8s(已更新为V1.13.0版本)

1. 基本系统环境

1.1 系统内核

查看当前系统内核(我这里是5.0.5-1.el7.elrepo.x86_64):

uname -a

版本必须大于等于3.10,否则需要升级内核:

# ELRepo 仓库(可以先看一下 /etc/yum.repos.d/ 中是否有yum 源)
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

# 查看可用内核,一般上面安装的序号为0
awk -F\' '$1=="menuentry " {
   print i++ " : " $2}' /etc/grub2.cfg

# 设置默认内核为最新的
grub2-set-default 0

# 生成 grub 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

# 重启
reboot

# 验证
uname -a

1.2 关闭增强型Linux SELINUX并禁用防火墙

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 更改为 SELINUX=disabled
vim /etc/selinux/config

systemctl stop firewalld
systemctl disable firewalld
# 验证
systemctl status firewalld

1.3 确保hostname、MAC地址和UUID的唯一性

# 查看mac地址确认
cat /sys/class/net/ens33/address

# 查看确认UUID
cat /sys/class/dmi/id/product_uuid

1.4 关闭swap

swapoff -a,并注释/etc/fstab中的

/dev/mapper/centos-swap swap                    swap    defaults        0 0

确认关闭(swap应该为0)

free -m

1.5 配置网桥的流量,避免错误

引入br_netfilter模块:

# 方式1
lsmod | grep br_netfilter

# 方式2
modprobe br_netfilter

配置各节点系统内核参数使流过网桥的流量也进入iptables/netfilter框架中,可以配置到/etc/sysctl.conf中,或者在/usr/lib/sysctl.d//run/sysctl.d//etc/sysctl.d/任意目录下创建配置文件进行配置,比如:

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

指定加载的配置文件:

# 从/etc/sysctl.d/k8s.conf 加载配置
sysctl -p /etc/sysctl.d/k8s.conf
# 加载任意配置文件
sysctl --system

1.6 节点hosts文件

节点安排如下(根据自己虚拟机的IP自行更改),每个机器上hosts文件都加进去:

10.4.37.24 k8smaster
10.4.37.69 k8snode1
10.4.37.72 k8snode2

或者在克隆机器后,直接更改每个机器的主机命名(其他节点类似):

# 更改主机名
hostname k8smaster
# 编辑hosts,追加
vim /etc/hosts
127.0.0.1 k8smaster

2. 安装docker

详细版本搭配见External Dependencies

添加docker的yum源(yum的源配置 /etc/yum.repos.d/

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

【注】如果没有代理,将上述yum的源改成国内的,这里使用阿里云:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

搜索docker-ce可用镜像:

yum list docker-ce --showduplicates | sort -r

安装指定版本的docker(目前最新的1.14.0版本的kubenetes依赖的docker可以为1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09):

yum install docker-ce-17.09.1.ce-1.el7.centos

创建docker配置目录和docker守护线程配置文件:

mkdir /etc/docker
vim /etc/docker/daemon.json

写入(可以更改驱动为默认的cgroupfs,docker加速器可以去阿里云获取)

{
   
    "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"]
}

配置网络策略:

iptables -P FORWARD ACCEPT

配置docker启动策略并重新启动:

systemctl daemon-reload && systemctl enable docker && systemctl restart docker

【附】

若版本不符合需要对docker进行升级或者删除后再进行上述的安装:

yum -y remove docker*
rm -rf /var/lib/docker

3. 安装kubelet kubectl kubeadm(v1.14.0)

  • kubeadm:启动集群的命令工具;
  • kubelet:用于启动Pod和容器等对象的工具(核心组件),所以它需要在集群中的每个节点上部署;
  • kubectl:用于和集群通信的命令行;

3.1 配置yum源

如果可以翻墙(科学上网Shadowsocks),可以直接使用google的源:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

添加Kubernetes安装源认证key:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

【注】如果没有代理,将上述yum的源改成国内的,这里使用阿里云:

cat <<EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装最新的k8s安装工具并设置启动策略:

# 安装最新的kubelet和kubectl以及kubeadm
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 设置启动策略
systemctl daemon-reload && systemctl enable kubelet && systemctl start kubelet

当使用docker时,kubeadm 会自动检测 kubelet 使用的cgroup driver ,并将运行时设置到 /var/lib/kubelet/kubeadm-flags.env 文件中,如果使用不同的CRI(容器运行时),就需要编辑 /etc/default/kubelet(该文件需要手动创建)指定cgroup-driver的值:

Environment=
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd

由于 kubelet 默认的驱动就是cgroupfs,所以只有CRI的cgroup driver不是cgroupfs时才需要指定(k8s推荐docker的cgroup driver配置为systemd)。

拉取核心组件镜像(翻墙不稳定可能需要多拉几次):

kubeadm config images pull

注:

如果无法拉下镜像可以通过kubeadm config images list --kubernetes-version=v1.13.0命令查看具体需要哪些镜像:

k8s.gcr.io/kube-apiserver:v1.13.0
k8s.gcr.io/kube-controller-manager:v1.13.0
k8s.gcr.io/kube-scheduler:v1.13.0
k8s.gcr.io/kube-proxy:v1.13.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.6

然后从docker的google的克隆镜像拉取,完事后更换tag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值