我的环境:CentOS7
准备至少3台虚拟机:一台Master Node,两台worker Node
这里说明一下,如果只有两台机器,一台master,一台work node,虽然应用也能部署起来,但是如果Work node故障了之后,Work Node上的应用并不能迁移到Master Node上,因为Master Node不允许这样做。
1 关闭selinux和防火墙
#sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
#setenforce 0
#systemctl disable firewalld
#systemctl stop firewalld
2 关闭swap
swapoff -a
3为每台服务器添加host解析记录
cat >>/etc/hosts<<EOF
<Master Node IP> master1
<Work Node1 IP> node1
<Work Node2 IP> node2
EOF
4 配置内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
sysctl --system
5 添加yum源
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum clean all
yum makecache
yum -y update
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel.repo
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
6 安装K8s
这里我用的是1.15.3版
说明一下,这边我直接用加载包的方式来安装相关的1.15.3版的镜像。
yum install -y kubelet-1.15.3 kubeadm-1.15.3 kubectl-1.15.3 kubernetes-cni
systemctl enable kubelet
yum install -y docker-ce-cli-18.09.3-3.el7
yum install -y docker-ce-18.09.3-3.el7
systemctl enable docker && systemctl start docke
#下面的操作是为docker配置代理,视情况而定要不要做
mkdir /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://10.167.129.21:8080" "HTTPS_PROXY=http://10.167.129.21:8080" "NO_PROXY=localhost,127.0.0.1"
systemctl daemon-reload
systemctl restart docker
docker info
docker load -i k8s-v1.15.3.images.tar.gz
7 在master节点上执行初始化命令
下面的参数可以根据需要修改
kubeadm init --kubernetes-version=v1.15.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=<Master Node IP>
为kubectl准备Kubeconfig文件
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
8 部署Work Node节点
Master节点在初始化命令执行后,会在输出的时候显示部署Worker Node节点的命令。在两个Worker Node节点上分别执行下面的命令
kubeadm join 193.160.20.20:8443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:e59c689770827558b569aa428442c92a9c937c0b489d474ac9f9dff06df89b1d
如果上述命令忘记了,在Master上执行下面的命令即可
kubeadm token create --print-join-command
9 部署完node节点之后可以通过以下命令查看个节点状态。
不过一般会发现master和node的状态都是NotReady,coredns的pod是pending状态
kubectl get nodes
kubectl get pods -o wide -n kube-system
journalctl -f -u kubelet.service
那么就需要在node节点上安装flannel(flannel只需要在Node节点安装,Master节点无需安装)
先看flannel像有没有成功拉取
docker images|grep flannel
如果没有,那么就需要通过docker pull去拉取flannel镜像
安装flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
再查询,此时应该ready状态
kubectl get nodes
可能出现的问题:
1 证书过期
date -s "2020-05-11 22:30:00"(将时间修改为没过期的时间)
kubeadm alpha certs check-expiration
chmod -R +r /etc/cni/net.d/
2 如果上述过程中出现问题,可以通过以下命令重置,重置之后可以重新执行kubectl命令
kubeadm reset -f
10 将master节点中的【/etc/kubernetes/admin.conf】文件拷到从节点相同目录下,然后配置环境变量
在Master节点上执行:
scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes/
在Worker Node节点上执行
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
- 下一篇教大家部署应用