上篇主要介绍的k8s的各种概念以及前期环境要求准备等,这篇主要是基于三台服务器搭建k8s 集群环境;
目录
第二步: 所有节点安装Docker/kubeadm/kubelet
本次采用基于kubeadm 部署集群工具来快速部署实现;
第一步:初始化服务器
#检查是否 安装开放源 wget命令工具;
# 永久关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 永久关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 永久关闭swap
swapoff -a && sysctl -w vm.swappiness=0
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 使用 hostname 命令查看是否设置成功
# 在master添加hosts (注意只在master 执行)
cat >> /etc/hosts << EOF
10.0.4.16 k8s-master
10.0.4.15 k8s-node1
10.0.4.11 k8s-node2
EOF
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 生效
sysctl --system
# 时间同步 以下是centos 7 的同步方式
yum install ntpdate -y
ntpdate time.windows.com
# 时间同步 在CentOS8.0中默认不再支持ntp软件包,使用的是chrony。
systemctl stop chronyd #停止chronyd服务
systemctl start chronyd #开始chronyd服务
systemctl restart chronyd #重启chronyd服务
systemctl status chronyd #查看chronyd服务状态
systemctl enable chronyd #开机启动chronyd服务
systemctl disable chronyd #禁止开机启动chronyd服务
chronyc sources –v #查看时间同步源,查看时间同步进度
#结果解释: *说明时间同步完成,如果为?说明不成功,检查防火墙再看看chronyd有没有重启。
chronyc sourcestats -v #查看时间同步源状态:
timedatectl set-local-rtc 1 #硬件时间默认为UTC:
timedatectl set-ntp yes #启用NTP时间同步:
chronyc tracking #校准时间服务器:
网上设置方法:https://www.ecs086.com/news?id=210
查看命令 timedatectl
部分效果图:
第二步: 所有节点安装Docker/kubeadm/kubelet
1. docker 安装
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
$ yum -y install docker-ce-18.06.1.ce-3.el7
$ systemctl enable docker && systemctl start docker
$ docker --version
$ cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["0.0.0.0/0"]
}
EOF
$ systemctl restart docker
2.添加阿里云YUM软件源
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
3.安装kubeadm,kubelet和kubectl
$ yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
$ systemctl enable kubelet && systemctl start kubelet
// 自动补全
source <(kubectl completion bash)
第三步:初始化Master 节点
$ kubeadm init --apiserver-advertise-address=10.0.4.16 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU
命令解释:
// --apiserver-advertise-address 表示API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口
// --image-repository 拉取的镜像仓库地址
// --kubernetes-version 版本 // --service-cidr 为服务的虚拟 IP 地址另外指定 IP 地址段 默认值:"10.96.0.0/12"
// --pod-network-cidr 指明 pod 网络可以使用的 IP 地址段
效果如图表示成功
1.master 上执行 安装
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
第四步: 安装网络插件
//安装cni
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
systemctl status flanneld.service
// 查看
kubectl get pods -n kube-system
第五步:在工作节点上执行加入操作
kubeadm join --token ac6ep9.diols9r7474gx6by 10.0.4.16:6443 --discovery-token-ca-cert-hash sha256:aee5f485be60600ecd9725ea187f53656c812a9d5e6d059aa3361046b57244d2--cri-socket=/run/containerd/containerd.sock -v=10
到此 集群搭建基本完成,通过kubectl get node 查看节点的状态; 后续介绍在集群中部署搭建开发环境等;
部署故障总结
1.安装工具报错
1.
解决办法:
vim /etc/docker/daemon.json
加入
{
"exec-opts":["native.cgroupdriver=systemd"]
}
重启:systemctl restart docker
2.[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".
解决办法:
3.错误描述:
coredns-7f9c544f75-2sjs2一直处于ContainerCreating
解决办法:
下载fannel 网络插件安装即可
4.错误描述如图
解决办法
在node 中创建目录 /etc/cni/net.d
从master 采用scp命令复制文件
scp k8s-master:/etc/cni/net.d/* /etc/cni/net.d