Kubeadm方式搭建单master节点k8s集群
kubernetes集群搭建有两种方式。
- 使用使用官方社区推出的一个用于快速部署kubernetes集群的工具——kubeadm。
- 从 github 下载发行版的二进制包,手动部署每个组件,组成 Kubernetes 集群。
Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使 用二进制包部署 Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。本文使用第一种方式搭建k8s集群,快速了k8s。
1、环境准备
1.1 方案设计
本套环境采用一台master节点和三台 node节点组成单master集群。
1.2 硬件资源
| 机器类型 | 操作系统 | IP | Hostname | 硬件配置 |
|---|---|---|---|---|
| master-01 | Centos7 | 192.168.20.170 | K8s-master | 2CPU、2GB ARM、20GB硬盘 |
| Node-01 | Centos7 | 192.168.20.171 | K8s-node-01 | 4CPU、4GB ARM、30GB硬盘 |
| Node-02 | Centos7 | 192.168.20.172 | K8s-node-02 | 4CPU、4GB ARM、30GB硬盘 |
| Node-03 | Centos7 | 192.168.20.173 | K8s-node-03 | 4CPU、4GB ARM、30GB硬盘 |
1.3 环境准备
在所有机器上执行下面命令。
关闭防火墙:
$ 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 #永久
关闭selinux:
$ sed -i 's/enforcing/disabled/' /etc/selinux/config #永久
$ setenforce 0 # 临时
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
设置主机名:只在mater节点上操作
$ cat >> /etc/hosts << EOF
192.168.20.170 K8s-master
192.168.20.171 K8s-node-01
192.168.20.172 K8s-node-02
192.168.20.173 K8s-node-03
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
2、安装过程
2.1 安装docker
在所有节点上安装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
//配置镜像下载加速器
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
添加阿里YAML源
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
2.2 安装kubeadm,kubelet和kubectl
在所有节点上执行下面命令来安装:kubeadm,kubelet和kubectl。
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet
//k8s维护最新三个版本的发布分支([2022.7.2]当前最新三个版本为1.24、1.23、1.22)
//Kubernetes 版本表示为 x.y.z, 其中 x 是主要版本,y 是次要版本,z 是补丁版本
yum install -y kubelet kubeadm kubectl
//查看安装版本
kubeadm version
kubelet --version
2.3 部署master节点
在master节点上执行
> kubeadm init \
--apiserver-advertise-address=192.168.20.170 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
--------------------------安装成功后出现下面命令------------------------
//拷贝k8s认证文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
//Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
/and node
//默认token24小时,过期后需要重新生成:kubeadm token create --print-join-command
kubeadm join 192.168.20.170:6443 --token fx0qrb.94s3e9njho9l2lvl \
--discovery-token-ca-cert-hash sha256:c8ab6096bccae19697a4486242ea525a99e29b0607042943c071420fa4a73c62
2.4 安装Pod网络插件(CNI)
//默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
//docker
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.5 加入Kubernetes Node
向集群添加新节点(需要在node节点中执行下面命令),执行在kubeadm init输出的kubeadm join命令:这个在master init初始化时会有提示,更换为自己的IP和token。
kubeadm join 192.168.20.170:6443 --token fx0qrb.94s3e9njho9l2lvl \
--discovery-token-ca-cert-hash sha256:c8ab6096bccae19697a4486242ea525a99e29b0607042943c071420fa4a73c62
3、测试集群
3.1 测试集群
在Kubernetes集群中创建一个pod,验证是否正常运行:
$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=NodePort
$ kubectl get pod,svc // 查看nginx对外的端口
[root@k8s-master ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-85b98978db-gw67v 1/1 Running 0 46s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 28m
service/nginx NodePort 10.96.40.66 <none> 80:32755/TCP 14s
访问使用三个node节点主机的IP和nginx端口,均可访问则证明pod部署成功。
http://192.168.20.171:32755
http://192.168.20.172:32755
http://192.168.20.173:32755


浙公网安备 33010602011771号