k8s集群搭建
1. 服务器资源这里使用三台虚拟机作为服务器,服务器最低硬件资源限制如下服务器CPURAM192.168.235.180(master)22G192.168.235.181(node01)22G192.168.235.180(node02)22G这里我安装时将CPU设置为2核,内存设置为3G2.部署总思路在所有节点上安装Docker和kubeadm部署Kubernetes Master部署容器网络
1. 服务器资源
这里使用三台虚拟机作为服务器,服务器最低硬件资源限制如下
服务器 | CPU | RAM |
---|---|---|
192.168.235.180(master) | 2 | 2G |
192.168.235.181(node01) | 2 | 2G |
192.168.235.180(node02) | 2 | 2G |
这里我安装时将CPU设置为2核,内存设置为3G
2.部署总思路
- 在所有节点上安装Docker和kubeadm
- 部署Kubernetes Master
- 部署容器网络插件
- 部署 Kubernetes Node,将节点加入Kubernetes集群中
3.环境初始化
三台机器都要执行下面的命令进行初始化
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
- 关闭swap
swapoff -a #临时
vim /etc/fstab #注释掉里面swapoff相关 使用top命令查看发现swap为0 代表关闭交换分区成功
4. 设置hostname
vim /etc/hostname #每个机器上面分别修改为自己对应的hostname mater节点设置为如k8s-master node01节点设置为k8s-node01 node02节点设置为k8s-node02
- 配置hosts文件
vim /etc/hosts
#配置如下
192.168.235.180 k8s-master
192.168.235.181 k8s-node01
192.168.235.182 k8s-node02
- 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#回车 再执行下面命令
sysctl --system
-
设置ntp时间同步
这里参考我写另一篇文章: -
重启机器
init 6
4.所有节点执行安装Docker/kubeadm/kubelet
4.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
Docker version 18.06.1-ce, build e68fc7a
4.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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
4.3安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.14.0 kubeadm-1.14.0 kubectl-1.14.0
systemctl enable kubelet
#安装kubelet 后会在/etc下生成文件目录/etc/kubernetes/manifests/
# kubeadm 以后将会在 /etc 路径下生成配置文件和证书文件
[root@k8s-master etc]# tree kubernetes/
kubernetes/
├── admin.conf
├── controller-manager.conf
├── kubelet.conf
├── manifests
│ ├── etcd.yaml
│ ├── kube-apiserver.yaml
│ ├── kube-controller-manager.yaml
│ └── kube-scheduler.yaml
├── pki
│ ├── apiserver.crt
│ ├── apiserver-etcd-client.crt
│ ├── apiserver-etcd-client.key
│ ├── apiserver.key
│ ├── apiserver-kubelet-client.crt
│ ├── apiserver-kubelet-client.key
│ ├── ca.crt
│ ├── ca.key
│ ├── etcd
│ │ ├── ca.crt
│ │ ├── ca.key
│ │ ├── healthcheck-client.crt
│ │ ├── healthcheck-client.key
│ │ ├── peer.crt
│ │ ├── peer.key
│ │ ├── server.crt
│ │ └── server.key
│ ├── front-proxy-ca.crt
│ ├── front-proxy-ca.key
│ ├── front-proxy-client.crt
│ ├── front-proxy-client.key
│ ├── sa.key
│ └── sa.pub
└── scheduler.conf
5.部署Kubernetes Master
$ kubeadm init \
--apiserver-advertise-address=192.168.235.180
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.14.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
安装成功后,会在最后打印几句话(由于我实验过程中忘记截图下面的图为网上的)记得复制出来保存,后面node节点加入需要用到该命令
配置kubectl工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes # 有报错显示即可证明该工具安装成功
6.安装Pod网络插件(CNI)
常见做法是执行下面命令
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
但是我一直失败,通过下面的命令,发现master 节点一直处于NotReady状态
kubectl get nodes
排查:使用命令 查看到 是因为CNI网络一直没有安装成功
systemctl status kubelet
继续排查:使用命令
kubectl get pod -n kube-system
因为实验原因当时未截图,下面图片为从网上搜索到,但与我实验过程遇到情况一致
继续排查:使用命令 发现是因为镜像拉取不到。
kubectl describe pod kube-flannel-ds-amd64-2dqlf -n kube-system
实际中我拉取的镜像不是quay.io/coreos/flannel:v0.11.0-amd64 为了解决这个问题,我手工拉取kube-flannel.yml 文件,然后修改里面的镜像地址。然后重新kubectl apply -f kube.flannel.yaml 然后就解决问题。
#从该github 仓库下载找到kube-flannel.yml 在master上直接使用
https://github.com/anilcumulus/vagrant-k8s-flannel
7.Node节点加入集群
分别在k8s-node01和k8s-node02节点执行下面语句(该命令是在第5节部署Kubernetes Master 初始化后让大家记得保存的命令)
kubeadm join 192.168.235.180:6443 --token r8d2hq.lv6csseg7wh0xhpz \
--discovery-token-ca-cert-hash sha256:ebd35660f1cb2f7cd1d23a4354ffc5ee7dee4f5ba57b1c726e2a2d01f939610a
在master节点执行查看命令 master和node节点为Ready状态表示集群搭建OK
kubectl get nodes
参考资料如下:
https://www.jianshu.com/p/f4ac7f4555d3
https://www.cnblogs.com/dalianpai/p/12070902.html
https://github.com/anilcumulus/vagrant-k8s-flannel
更多推荐
所有评论(0)