首先说一下我的环境, 我是在windows 10 上面建了一个ubuntu18的虚拟机,同时由于某些原因 不受网络限制, 所以安装比较顺利。
Install
1.安装并启用 Docker
sudo apt install docker.io
sudo systemctl enable docker
docker --version
2.添加 Kubernetes signing key 和Repository
sudo apt install curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
3.安装Kubeadm
sudo apt install kubeadm
kubeadm version
#常用命令
重启kubelet服务:
systemctl daemon-reload
systemctl restart kubelet
sudo systemctl restart kubelet.service
sudo systemctl daemon-reload
sudo systemctl stop kubelet
sudo systemctl enable kubelet
sudo systemctl start kubelet
4.禁用 swapoff
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
#永久关闭 vim /etc/fstab 注释掉最后一行的swap
以上的指令我只在一台Ubuntu上执行的(如果你有多台计算机,需要在所有的计算机上执行以上指令,我这里是通过拷贝虚拟机来实现的)
5.准备2台虚拟机k8s-master和k8s-node(我这里把上面的计算机命名为 k8s_master ,copy它并命名为k8s_node)
sudo hostnamectl set-hostname k8s-master #在k8s-master 上执行 IP:192.168.255.229
sudo hostnamectl set-hostname k8s-node #k8s-node 上执行 IP:192.168.255.230
Deploy
1.在master上初始化 Kubernetes ,使用kubeadm config print init-defaults可以打印集群初始化默认的使用的配置,使用kubeadm默认配置初始化的集群,会在master节点打上node-role.kubernetes.io/master:NoSchedule的污点,阻止master节点接受调度运行工作负载。这里测试环境只有两个节点,所以将这个taint的effect从NoSchedule改为PreferNoSchedule 还有就是修订kubernet版本1.15.2
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.100.7
bindPort: 6443
nodeRegistration:
taints:
- effect: PreferNoSchedule
key: node-role.kubernetes.io/master
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.15.2
networking:
podSubnet: 10.244.0.0/16
#sudo kubeadm init --pod-network-cidr=192.168.255.229/2
kubeadm init --config kubeadm.yaml #--ignore-preflight-errors=Swap
sudo kubeadm init --pod-network-cidr=192.168.100.0/2 这里不应该用现有计算机的ip 这里有解决方案 https://stackoverflow.com/questions/52273029/kubernetes-dashboard-pod-is-crashing-again-and-again
如果执行中遇到detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd"
请参考Container runtimes执行
# Setup daemon.
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries":["192.168.100.20:80"]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
#我顺便吧docker的私有仓库也加在里面
# Restart docker.
systemctl daemon-reload
systemctl restart docker
如果遇到port 10251 and 10252 are in use 错误请执行 netstat -lnp | grep 1025 然后kill 进程ID
2在master节点上执行如下:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#检查 master
kubectl get nodes
3.Deploy a Pod Network & view the status
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get pods --all-namespaces
sudo kubectl get nodes
4.add slave node
在k8s-node上执行
kubeadm join 192.168.254.229:6443 --token ewlb93.v0ohocpvncaxgl16 --discovery-token-ca-cert-hash sha256:2522834081168fbe4b5b05854b964e76f1ea8bac6f8fc5e2be21c93c6a27c427
在k8s-master上检查节点信息: