centos系统部署k8s集群

最近本人在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

你可能感兴趣的:(centos系统部署k8s集群)