kubeadm安装kubernetes

2020-04-10 0 条评论 1.38k 次阅读 1 人点赞

利用kubeadm搭建了Kubernetes v1.18.0,这里做一个记录,最好不要照着这个博客搭建你们的生产环境,对于kubernetes的介绍这里就不再啰嗦了

初始化环境

环境介绍

这里利用自己笔记本上的VMware,使用了4个节点1个master节点,3个node节点,这里会首先初始化一个主机,搭建基础环境,完成后做快照,而后克隆该快照并修改IP地址主机名,减少了我们的工作量,以下是大概的规划表格

序号 IP地址 主机名 操作系统 硬件配置 节点类型
1 192.168.132.61 kubernetes01 CentOS7.7 2核2G Master
2 192.168.132.62 kubernetes02 CentOS7.7 2核2G Node
3 192.168.132.63 kubernetes03 CentOS7.7 2核2G Node
4 192.168.132.64 kubernetes04 CentOS7.7 2核2G Node

修改主机名

hostnamectl set-hostname kubernetes01

hosts文件

192.168.132.61 kubernetes01
192.168.132.62 kubernetes02
192.168.132.63 kubernetes03
192.168.132.64 kubernetes04

关闭selinux,firewalld

systemctl stop firewalld
systemctl disable firewalld
sed -ri.bak 's,SELINUX=(enforcing|permissive),SELINUX=disabled,' /etc/selinux/config
getenforce # 获取当前selinux状态,Disabled为关闭,注意修改了配置文件需要重启才生效

关闭swap

swapoff -a
sed -ri.bak 's,^(UUID=[a-z0-9\-]+ swap.*),#\1,' /etc/fstab

时间同步

Centos7中同步时间使用的是chronyd服务,比也是利用的ntp,比传统的ntp效果更好,其配置文件是/etc/chrony.conf 可以修改配置文件中的server指定时间服务器地址,只要保证该服务正常运行就可以了

准备yum仓库配置

base源:

cd /etc/yum.repos.d
mkdir repos_bak
mv *.repo repos_bak #将系统的源配置文件备份 使用我们自己的
vim base.repo
[base]
name=base
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0

epel源

vim epel.repo
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
enabled=1
gpgcheck=0

docker源

wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

extras源:docker依赖的某些包会在这个源中

vim extras.repo
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

安装docker

yum install docker-ce
mkdir -p /etc/systemd/system/docker.service.d

安装过程有什么问题可以参考之前的博客 CentOS安装docker

配置docker

vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
systemctl daemon-reload
systemctl start docker
systemctl enable docker

以上,registry-mirrors是将docker默认拉取的仓库修改为国内源,以提高拖取镜像的速度

配置内核参数

cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system

加载ip_vs内核模块

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

安装kubernetes相关软件包

yum install kubelet kubeadm kubectl ipvsadm
echo 'KUBELET_EXTRA_ARGS="--fail-swap-on=false"' >>  /etc/sysconfig/kubelet
systemctl enable kubelet

构建flannel镜像

由于我这里网络的问题后续安装集群时用到的flannel的镜像拉不下来,这里自己先制作一个flannel的镜像

mkdir -pv flannel/dist
cd flannel
wget https://github.com/coreos/flannel/raw/master/Dockerfile.amd64 -O Dockerfile
cd dist
wget https://github.com/coreos/flannel/raw/master/dist/mk-docker-opts.sh
wget https://github.com/coreos/flannel/releases/download/v0.12.0/flanneld-amd64
cd ..

从github下载flanneld-amd64可能会特别慢,可以到 https://dl.smartyhero.com 下载

镜像是基于alpine镜像制作的,由于alpine镜像中的apk命令使用的默认软件仓库我的网络访问特别慢,这里稍微修改一下Dockerfile,将镜像源改为阿里云,结果如下

FROM alpine

LABEL maintainer="Tom Denham <tom@tigera.io>"

ENV FLANNEL_ARCH=amd64

RUN echo 'http://mirrors.aliyun.com/alpine/v3.11/main' > /etc/apk/repositories \
  && echo 'http://mirrors.aliyun.com/alpine/v3.11/community' >> /etc/apk/repositories \
  && apk add --no-cache iproute2 net-tools ca-certificates iptables strongswan && update-ca-certificates \
  && apk add wireguard-tools --no-cache --repository http://mirrors.aliyun.com/alpine/edge/community
COPY dist/flanneld-$FLANNEL_ARCH /opt/bin/flanneld
COPY dist/mk-docker-opts.sh /opt/bin/

ENTRYPOINT ["/opt/bin/flanneld"]

制作镜像

docker image build -t quay.io/coreos/flannel:v0.12.0-amd64 .

做快照

到这里基础环境就做的差不多了,可以关机做一个快照了,而后克隆三个虚拟机出来,这里提供一种VMware使用命令克隆的方式,首先需要打开cmd而后将目录切换到VMware的安装目录下

vmrun.exe -T ws clone  "E:\vms\kubernetes01\kubernetes01.vmx" "E:\vms\kubernetes02\kubernetes02.vmx" full -snapshot=init -cloneName=kubernetes02

克隆完成后VMware workstation中是没有的,需要使用文件 --> 扫描虚拟机 然后选择你虚拟机的父目录,可以将克隆的虚拟机加载到workstation的列表中

克隆完成后,启动所有的虚拟机,而后修改IP地址,主机名,接下来就可以正常安装集群了

安装集群

初始化集群(主节点)

kubeadm init --kubernetes-version=v1.18.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --image-repository gcr.azk8s.cn/google_containers  --apiserver-advertise-address=192.168.132.61
mkdir -p $HOME/.kube # 以下这三条命令是为kubectl命令提供一个相当于秘钥文件吧
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

当然在执行kubeadm init 命令的时候很有可能会报错,可以根据提示操作后,重新执行,没有问题后,最后输出的kubeadm join命令需要记录下来,利用这条命令可以将其他节点加入集群,

早期版本的时候我们安装集群最大的问题就是拉取不到镜像,后期的kubeadm工具提供了指定镜像源的选项--image-repository 让我自己指定一个可以访问到的镜像地址

如果机器上有多个网卡可以使用 --apiserver-advertise-address来确定api-server监听在哪个地址上

配置flannel

刚才我们已经构建好了flannel镜像,直接利用官方提供好的yaml文件安装就可以了

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kube-proxy使用ipvs

有可能我们安装后发现,虽然我们加载了ipvs相关的内核模块但是还是使用iptables来实现的service网络,可以利用下面的方法将其改为使用ipvs

kubectl edit configmap kube-proxy -n kube-system

这里会打开一个vi编辑器需要修改mode的值为ipvs,大概位置如下

kind: KubeProxyConfiguration
metricsBindAddress: ""
mode: "ipvs" # 这里本身可能是"",需要修改为"ipvs"
nodePortAddresses: null
oomScoreAdj: null
portRange: ""
showHiddenMetricsForVersion: ""
udpIdleTimeout: 0s

删除原有的kube-proxy相关的pod,他会使用新的配置文件重新启动kube-proxy

ipvsadm -C # 先清理ipvs规则
kubectl get pods -n kube-system # 根据这里获取到的kube-proxy名称进行下面的删除操作
kubectl delete pod kube-proxy-xxx -n kube-system 

可以使用ipvsadm -Ln命令验证,也可以使用查看kube-proxy的日志确认,可以看到开头会有 server_others.go:259] Using ipvs Proxier. 这样的输出,表明我们已经使用了ipvs

Node节点配置

这里需要使用你自己init的时候得到的命令,用我这个肯定不行的

kubeadm join 192.168.132.61:6443 --token 6nk6ze.ub4oqstmlwf8issz \
    --discovery-token-ca-cert-hash sha256:366aef98300b358923f86617f4cb1d74ffba393b9d24378a4e2ab5aeee31914a

接下来在Master节点就可以看到已经加入到集群的节点了

kubectl get nodes

如果想要重新安装集群,可以使用kubeadm reset 命令重置集群

最后,我自己的集群有个问题,通过service在宿主机上访问,速度会特别慢,在pod中访问时没有问题的,不知道大家有没有遇到的,如果您有幸看到这篇文章可以在下方进行交流,后期如果自己换了性能更好的电脑,可能会出一套利用二进制方式搭建集群的教程

bighero

这个人太懒什么东西都没留下

文章评论(0)