最近本人在centos7环境下搭建k8s集群,搭建过程中遇到很多问题,也一个一个慢慢解决了。这篇博客参考了https://www.jianshu.com/p/e43f5e848da1;https://www.zhihu.com/tardis/sogou/art/62814079;
1.配置yum源
这里我们使用阿里云的yum源来替代系统自带的:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache
2.关闭防火墙
systemctl stop firewalld & systemctl disable firewalld
[1] 10341
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
3.关闭Swap
swapoff -a && sysctl -w vm.swappiness=0
# 关闭swap
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
# 取消开机挂载swap
4.安装Docker
4.1添加仓库
添加阿里云的Docker仓库:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
4.2安装Docker
yum install -y docker-ce
4.3启动Docker服务并激活开机启动
systemctl start docker & systemctl enable docker
4.4 查看Docker版本
docker version
4.5修改docker cgroup驱动,与k8s一致,使用systemd
cat > /etc/docker/daemon.json <
重启使配置生效:systemctl restart docker
5.安装Kubernetes
我们将现有的虚拟机称之为Node1,用作主节点。为了减少工作量,在Node1安装Kubernetes后,我们利用VirtualBox的虚拟机复制功能,复制出两个完全一样的虚拟机作为工作节点。三者角色为:
Node1:Master
Node2:Woker
Node3:Woker
5.1配置K8S的yum源
使用阿里源的仓库,执行以下命令添加kubernetes.repo仓库:
cat < /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
5.2 关闭SElinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
5.3 设置路由
yum install -y bridge-utils.x86_64
modprobe br_netfilter # 加载br_netfilter模块,使用lsmod查看开启的模块
cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
重新加载所有配置文件:sysctl --system
5.4 安装K8S组件
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet
# 开机启动kubelet
5.5. 下载K8S的Docker镜像
vi images.sh
添加以下内容:
MY_REGISTRY=gcr.azk8s.cn/google-containers
##拉取镜像
docker pull ${MY_REGISTRY}/kube-apiserver:v1.15.2
docker pull ${MY_REGISTRY}/kube-controller-manager:v1.15.2
docker pull ${MY_REGISTRY}/kube-scheduler:v1.15.2
docker pull ${MY_REGISTRY}/kube-proxy:v1.15.2
docker pull ${MY_REGISTRY}/pause:3.1
docker pull ${MY_REGISTRY}/etcd:3.3.10
docker pull ${MY_REGISTRY}/coredns:1.3.1
##添加Tag
docker tag ${MY_REGISTRY}/kube-apiserver:v1.15.2 k8s.gcr.io/kube-apiserver:v1.15.2
docker tag ${MY_REGISTRY}/kube-controller-manager:v1.15.2 k8s.gcr.io/kube-controller-manager:v1.15.2
docker tag ${MY_REGISTRY}/kube-scheduler:v1.15.2 k8s.gcr.io/kube-scheduler:v1.15.2
docker tag ${MY_REGISTRY}/kube-proxy:v1.15.2 k8s.gcr.io/kube-proxy:v1.15.2
docker tag ${MY_REGISTRY}/pause:3.1 k8s.gcr.io/pause:3.1
docker tag ${MY_REGISTRY}/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag ${MY_REGISTRY}/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
#删除无用的镜像
docker images | grep ${MY_REGISTRY} | awk '{print "docker rmi " $1":"$2}' | sh -x
echo "end"
5.5.1 启动下载:bash +x images.sh
5.6 查看镜像
docker images
6.复制虚拟机
并将网络设置成仅主机模式,打开虚拟机,使用ip addr查看每个虚拟机的ip地址,并使用hostnamectl set-hostname 主机名来设置每个虚拟机的主机名。编辑/etc/hosts,追加内容 IP k8s-node1。
7.创建集群
7.1初始化Master(Master需要至少2核)
kubeadm init --apiserver-advertise-address 192.168.70.138 --pod-network-cidr 10.244.0.0/16 # --kubernetes-version 1.15.2
含义:
1.选项–pod-network-cidr=10.244.0.0/16表示集群将使用fannel网络
2.选项–kubernetes-version=v1.15.2指定K8S版本,这里必须与之前导入到Docker镜像版本v1.15.2一致,否则会访问谷歌去重新下载K8S最新版的Docker镜像
3…若执行kubeadm init出错或强制终止,则再需要执行该命令时,需要先执行kubeadm reset重置
7.2集群成功初始化,并且我们需要执行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
7.3创建网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
8.集群设置
将Master作为工作节点
K8S集群默认不会将Pod调度到Master上,这样Master的资源就浪费了。在Master(即k8s-node1)上,可以运行以下命令使其作为一个工作节点:
kubectl taint nodes --all node-role.kubernetes.io/master-
8.1其他节点加入集群
在其他两个节点k8s-node2和k8s-node3上,执行主节点生成的kubeadm join命令即可加入集群:
kubeadm join 192.168.70.138:6443 --token plndz7.3vak5znnwvstr9cm \
--discovery-token-ca-cert-hash sha256:ebd25d7efbd6338e7b33229c6522e4f1a5b9d7f397c5d0f032115904074e7707
8.2验证集群是否正常
当所有节点加入集群后,稍等片刻,在主节点上运行kubectl get nodes
查看节点信息。
journalctl -f
# 当前输出日志
journalctl -f -u kubelet
# 只看当前的kubelet进程日志
查看所有pod状态,运行kubectl get pods -n kube-system