k8s集群搭建

提要

系统环境:
    centos7
    内核版本:4.18.8-1.el7.elrepo.x86_64(其实3.10以上就行了)
    docker:19.3
    k8s:1.18.3
    需要有基本的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      <none>    50d       v1.13.2
k8s3    Ready      <none>    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/