Warning: file_get_contents(https://resources.iicats.com/20200323/1/1_ZzRryWga_u=175965930,2539474621&fm=26&gp=0.jpg): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /www/wwwroot/www.iicats.com/wp-includes/class-wp-image-editor-imagick.php on line 156
Warning: file_get_contents(https://resources.olei.me/iicats/2020/01/20200121_082416_83.jpeg): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /www/wwwroot/www.iicats.com/wp-includes/class-wp-image-editor-imagick.php on line 156
以双节点为例
192.168.1.2
192.168.1.3
准备
若未明确说明,均为所有主机都操作
设置主机名以及 hosts
文件
- 设置主机名
# 分别设置为 master、node1 hostnamectl set-hostname master hostnamectl set-hostname node1
- 修改
hosts
(两主机运行)
192.168.1.2 master
192.168.1.3 node1
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭 SELINUX
# 临时关闭
setenforce 0
# 永久关闭
vi /etc/selinux/config
#SELINUX 修改为 disabled
SELINUX=disabled
关闭 swap
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
配置系统参数
# 制作配置文件
$ cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
EOF
# 生效文件
$ sysctl -p /etc/sysctl.d/kubernetes.conf
安装依赖
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
安装 docker
yum remove docker docker-common docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
yum install docker-ce
# 安装指定版本的 docker,比如 17.03.2-ce
yum list docker-ce --showduplicates |sort -r
- 安装指定版本
yum install docker-ce-selinux-17.03.2.ce-1.el7.centos -y
yum install docker-ce-17.03.2.ce-1.el7.centos -y
- 启停
docker
systemctl start docker systemctl enable docker
- 更改
docker
的cgroup-driver
# 查看 docker info | grep -i cgroup # 默认是 cgroup # 更改为 systemd vi /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } # 重新启动 docker systemctl restart docker
安装 kubeadm
、kubelet
、kubectl
以安装
v1.11.2
版本为例
- 配置源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
- 查找版本号并安装
yum makecache fast yum list kubeadm --showduplicates | sort -r # 其他类似 yum install kubeadm-1.11.2-0 kubelet-1.11.2-0 kubectl-1.11.2-0 -y # 最新版可以直接使用 yum install kubeadm kubelet kubectl -y
- 开机自动启动
kubelet
systemctl enable kubelet systemctl start kubelet # 此时 kubelet 状态不是 Starting,可以不用纠结
准备必要的镜像
- 查看必须要安装的镜像
$ kubeadm config images list --kubernetes-version v1.11.2
k8s.gcr.io/kube-apiserver-amd64:v1.11.2
k8s.gcr.io/kube-controller-manager-amd64:v1.11.2
k8s.gcr.io/kube-scheduler-amd64:v1.11.2
k8s.gcr.io/kube-proxy-amd64:v1.11.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd-amd64:3.2.18
k8s.gcr.io/coredns:1.1.3
- 各个节点安装镜像脚本
#!/bin/bash
images=(
kube-apiserver-amd64:v1.11.2
kube-controller-manager-amd64:v1.11.2
kube-scheduler-amd64:v1.11.2
kube-proxy-amd64:v1.11.2
pause:3.1
etcd-amd64:3.2.18
coredns:1.1.3
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} k8s.gcr.io/${imageName}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
done
初始化集群 (只 master 节点执行)
初始化
kubeadm init --kubernetes-version=v1.11.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.2 --token-ttl 0
--token-ttl
:设置为 0 表示生成的 token 不过期
- 会生成类似如下的输出
记住最下面的一行命令行,类似:
kubeadm join 192.168.1.2:6443 --token hu2clf.898he8fnu64w3fur --discovery-token-ca-cert-hash sha256:2a196bbd77e4152a700d294a666e9d97336d0f7097f55e19a651c19e03d340a4
允许使用 kubectl
访问集群
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
节点加入集群 (在 node 节点上执行)
kubeadm join 192.168.1.2:6443 --token hu2clf.898he8fnu64w3fur --discovery-token-ca-cert-hash sha256:2a196bbd77e4152a700d294a666e9d97336d0f7097f55e19a651c19e03d340a4
重新创建集群
kubeadm reset
kubeadm init xxx.xxxxx
安装网络插件 flannel
mkdir -p ~/k8s/
cd ~/k8s
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# vi kube-flannel.yml,将里面的 Network 网段修改为跟上面 kubeadm init 后面紧跟的--pod-network-cidr 一样的网段,不然会报错
kubectl apply -f kube-flannel.yml
- 查看状态
kubectl get pod --all-namespaces
kubectl get nodes
设置 master node
参与工作负载 (只在 master 节点执行)
- 允许 master 节点部署 pod,使用命令如下:
kubectl taint nodes --all node-role.kubernetes.io/master-
输出如下
node "k8s" untainted
# 输出 error: taint 「node-role.kubernetes.io/master:」 not found 错误忽略。
- 禁止 master 部署 pod
kubectl taint nodes k8s node-role.kubernetes.io/master=true:NoSchedule
集群中移除 Node
- 在 master 节点上执行
kubectl drain node1 --delete-local-data --force --ignore-daemonsets kubectl delete node node1
- 在
node1
上执行kubeadm reset ifconfig cni0 down ip link delete cni0 ifconfig flannel.1 down ip link delete flannel.1 rm -rf /var/lib/cni/
其他
- 重新创建
join
的token
kubeadm token create --print-join-command
官方推荐高可用部署方案
第三方快速搭建高可用部署方案
本文作者为 olei,转载请注明。