swapoff -a #临时生效,重启失效
修改开机加载配置文件,把swap开机加载配置项注释掉。
vim /etc/fstab #永久禁用
mount -a # 重新加载生效
【注意】:以上操作三台主机都要执行
cd /etc/yum.repos.d # 进入指定目录
vim kubernetes.repo # 新建kubernetes.repo文件,编辑如下内容
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
yum repolist #查看
yum makecache #在本地生成缓存
vim /etc/sysctl.d/k8s.conf #在该目录下自定义conf文件,添加以下配置项
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
重新加载文件使其生效
sysctl -p /etc/sysctl.d/k8s.conf
modprobe br_netfilter
echo net.ipv4.ip_forward = 1 > /etc/sysctl.conf
sysctl -p #加载该文件,使其生效
vim /etc/yum.conf
yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0
下载完成后查看是否缓存了rpm包
cd /var/cache/yum/x86_64/7/kubernetes/packages
ls
systemctl enable kubelet.service
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0
docker pull quay.io/coreos/flannel:v0.11.0-amd64
docker pull coredns/coredns:1.3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull mirrorgooglecontainers/pause:3.1
下载完成后,通过docker images
查看镜像,
根据 IMAGE ID修改mirrorgooglecontainers开头的镜像名称,
用docker tag IMAGE_ID NEW_REPOSITORY
修改名称(可以保留旧的),
#例如:
docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0
修改后如下:
#初始化集群
kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
参数解释:
–kubernetes-version:指定当前kubernetes版本号(查看版本:kubelet --version)
–pod-network: 指定pod网段,kubernetes默认指定网络。
–ignore:忽略所有报错
根据上图的提示创建目录并授予权限:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看节点:
kubectl get nodes
可以看出master的状态是未就绪(NotReady),之所以是这种状态是因为还缺少一个附件flannel,没有网络各Pod是无法通信的。
将该yml文件下载到本地
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
kubectl get nodes
yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0
systemctl enable kubelet.service
与master操作一样,先通过脚本拉取镜像,然后通过docker tag
修改镜像名称
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
docker pull quay.io/coreos/flannel:v0.11.0-amd64
下载完成后,通过docker images
查看镜像,
根据 IMAGE ID修改mirrorgooglecontainers开头的镜像名称,
用docker tag IMAGE_ID NEW_REPOSITORY
修改名称,
#例如:
docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0
在两个从节点分别执行以下命令加入集群(在初始化集群是生成的,并且每次的值都是不同的)
kubeadm join 192.168.xxx.xxx:6443 --token wgms7n.fba5wzd4lbtzdjxg \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxx9f03f0eabda21a31xxxxe94db3a55596xxxxxxxxxxxxxxxxxxxxx
kubectl get nodes
确保有其他节点的信息,并且状态都为ready。
注意:如果状态为NotReady,那就是网络的问题,没有部署跨主机网络,则需要执行上面【2.4 - 6】部署docker容器的跨主机的网络。
至此k8s集群已经搭建完成。
【补充】:
如果初始化集群(在master上初始化集群)后没有保存添加节点命令,或者是初始化成功后的信息信息被覆盖了想要重新初始化,可以先执行kubeadm reset
命令重装一下,再重新初始化。
而当你执行完重置命令后,再进行初始化时,可能会报以下错误:
需要将该目录删除掉,
rm -rf /var/lib/etcd
如果已经创建了~/.kube
目录,也需要一并删除,然后再重新初始化集群。
参考原文《安装部署Kubernetes集群实战》