k8s集群搭建
提要
系统环境:
centos7
内核版本:4.18.8-1.el7.elrepo.x86_64(其实3.10以上就行了)
docker:17.3
k8s:1.18.3
系统必须支持cgroup
需要有基本的ip、mount等常用命令

硬件需求:
最低双核2G
准备工作
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

setenforce 0
设置hosts解析到所有集群主机(根据你的具体IP)
master 192.168.10.14
node 192.168.10.15
node1 192.168.10.18
关闭swap分区
swapoff -a && sysctl -w vm.swappiness=0

不同文件会有差异

$ sed '/swap.img/d' -i /etc/fstab
注意:这只是临时关闭,重启依旧出现临时分区
设定节点参数
所有节点需要设定以下系统参数。

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
安装docker
查看是否已安装docker
如果有,请先卸载
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
添加docker增源
cd /etc/yum.repos.d/ && wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
顺带新增k8s源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0

EOF

yum -y install epel-release
yum clean all && yum makecache
安装Docker
yum install -y docker-ce
启动并开机自启 docker
systemctl start docker&& systemctl enable docker
安装k8s
安装

yum install -y kubelet-1.18.3 kubeadm-1.18.3 kubectl-1.18.3
启动

systemctl enable kubelet && systemctl start kubelet
网速不好的话需要配置一个阿里云的加速器:
登录 https://cr.console.aliyun.com/ 获取你的镜像加速地址
按ali的教程操作
×加入 docker systemd支持
新版本的k8s已经不再建议使用cgroup,建议使用systemd
vim /etc/docker/daemon.json
加入
"exec-opts": ["native.cgroupdriver=systemd"]
最后
systemctl daemon-reload
systemctl restart docker

然后 ps aux | grep docker 然后你就会发现带有镜像的启动参数了。
提前手动pull k8s所需要的基本镜像
kubeadm config images pull
*电脑不能翻墙的走这一步,能的请略过
直接运行以下shell

#!/bin/bash
images=(
kube-apiserver:v1.18.3
kube-controller-manager:v1.18.3
kube-scheduler:v1.18.3
kube-proxy:v1.18.3
etcd:3.4.3
coredns:1.6.7
)
for imageName in ${images[@]} ; do  
    docker pull registry.aliyuncs.com/google_containers/$imageName
    docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.i0/$imageName
    docker rmi registry.aliyuncs.com/google_containers/$imageName
done

node节点需要

kube-proxy-amd64:v1.18.3
初始化master环境
运行,命令大约需要1分钟的过程,期间可以观察下 tail -f /var/log/message 日志文件的输出,掌握该配置过程和进度。

kubeadm init --kubernetes-version=v1.18.3 --pod-network-cidr 10.244.0.0/16
安装完之后会有一段信息
kubeadm join 192.168.10.15:6443 --token rh9w6c.jmicodta6qj4t5mh --discovery-token-ca-cert-hash sha256:fa7b11bb569493fd44554aab0afe55a4c051cccc492dbdfafae6efeb6ffa80e6
节点Token过期处理
kubeadm token create
输出 1j4fod.ns6uppyao1y4y8gi

将上面的 thczis.64adx0imeuhu23xv 替换为 1j4fod.ns6uppyao1y4y8gi然后再次到node节点运行就好了
master节点运行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config // 此文件各个节点应该都会有一份
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此时我们切换到节点操作
kubeadm join 192.168.10.15:6443 --token thczis.64adx0imeuhu23xv --discovery-token-ca-cert-hash sha256:fa7b11bb569493fd44554aab0afe55a4c051cccc492dbdfafae6efeb6ffa80e6
在各个节点运行完之后
应该可以在节点上运行 kubectl get pod -n kube-system 命令会出现各个pod状态
此时你会注意到两个coredns和proxy是pending状态,不要慌
因为你没安装网络插件
运行

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

耐心等待几分钟之后再次运行 kubectl get pod -n kube-system 所有状态应该是runing状态了
Node节点角色名为nonde解决
NAME STATUS ROLES AGE VERSION
k8s1 Ready master 50d v1.13.2
k8s2 Ready 50d v1.13.2
k8s3 Ready 50d v1.13.2

kubectl label node k8s2 node-role.kubernetes.io/worker=worker
此时输出

NAME STATUS ROLES AGE VERSION
k8s1 Ready master 50d v1.13.2
k8s2 Ready worker 50d v1.13.2
k8s3 Ready worker 50d v1.13.2
master节点加入节点运算
kubectl taint nodes --all node-role.kubernetes.io/master-
清理
kubeadm reset
rm -f $HOME/.kube/config
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/