使用kubeadm搭建k8s集群
集群环境规划
4台虚拟机,每台至少2G内存,2个CPU,能联网
- 192.168.10.102 k8smaster节点
- 192.168.10.103 k8snode1节点
- 192.168.10.104 k8snode2节点
- 192.168.10.105 nfs服务器
虚拟机配置
4台虚拟机都需要操作
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
# 关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 根据规划设置主机名[不同的节点执行设置不同的主机名]
hostnamectl set-hostname k8smaster
hostnamectl set-hostname k8snode1
hostnamectl set-hostname k8snode2
hostnamectl set-hostname nfs
# 在master添加hosts [nfs服务器的主机名映射可以不需要]
cat >> /etc/hosts << EOF
192.168.10.102 k8smaster
192.168.10.103 k8snode1
192.168.10.104 k8snode2
EOF
# 将桥接的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 # 生效
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
安装docker
除了nfs服务器,其余3个节点都需要安装
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
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
安装kubeadm,kubelet,kubectl
除了nfs服务器,其余3个节点都需要安装
配置阿里云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
安装kubeadm,kubelet,kubectl
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet
安装Master
在k8sMaster服务器上执行
初始化Master,只需要修改其中的192.168.10.102为自己的服务器ip
kubeadm init \
--apiserver-advertise-address=192.168.10.102 \
--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
上诉命令得到的结果如下:
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.10.102:6443 --token 702gz5.49zhotgsiyqimwqw --discovery-token-ca-cert-hash sha256:2bc50229343849e8021d2aa19d9d314539b40ec7a311b5bb6ca1d3cd10957c2f
从得到的结果中复制执行:
```powershell
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装Node节点
在k8snode1和k8snode2上执行
根据master初始化返回得到的结果[kubeadm join…]
kubeadm join 192.168.10.102:6443 --token esce21.q6hetwm8si29qxwn \
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
注意:如果日志找不到了,可以用下面命令找到其中的token值和sha256值:
kubeadm token create --print-join-command
安装CNI网络插件
在k8sMaster节点执行
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
下载后需要 修改其中的image为国内镜像源。如果无法下载请参考 创建kube-flannel.yaml
部署插件应用
kubectl apply -f kube-flannel.yaml
搭建Harbor私服
在k8sMaster节点执行
下载harbor软件包
上传到k8sMaster的/root目录,解压得到一个harbor目录
tar -zxvf harbor-offline-installer-v2.1.0-rc1.tgz
进入harbor目录,修改配置文件
cd harbor
mv harbor.yml.tmpl harbor.yml
vim harbor.yml
修改hostname为k8sMaster的ip
注释https里面的内容
记住其中的harbor_admin_password: Harbor12345(初始化登录密码)
执行脚本下载相关镜像,并且运行镜像
注意:需要提前在k8smaster上安装docker-compose(自行安装)
./install.sh
界面使用k8sMaster的ip访问: 192.168.10.102:80 [admin/Harbor12345]
配置k8sMaster节点镜像从Harbor拉取
vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.10.102"] #这个ip是k8sMaster的ip
}
重启docker和harbor
systemctl daemon-reload
systemctl restart docker
## harbor目录下执行
docker-compose stop
docker-compose start
所有node节点配置Harbor镜像拉取
node节点k8snode1 k8snode2上执行
vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.10.102"] #这个ip是k8sMaster的ip
}
systemctl daemon-reload
systemctl restart docker
任意节点登录harbor并推送镜像到harbor仓库
docker login 192.168.10.102
输入用户名密码: admin Harbor12345
docker tag 本地镜像:tag 仓库地址/项目地址/容器名:tag
## 例如: docker tag nginx:latest 192.168.10.102/test/nginx:1.0
## 其中的test需要登录harbor界面,创建一个项目的名称
docker push 192.168.10.102/test/nginx:1.0
nfs存储搭建
在nfs服务器执行
yum install -y nfs-utils
vim /etc/exports
/data/nfs *(rw,no_root_squash) [指定/data/nfs目录为挂载地址]
mkdir /data/nfs
在k8s集群中所有的node节点上安装nfs: yum install -y nfs-utils
在nfs服务器上启动nfs:systemctl start nfs