搭建Kubernetes集群的三种方式
K8S部署三种方式:
minikube
用在测试
kubeadm部署(主要用在测试线,搭建简单,但现在发展很好也可以用在生产)
kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
二进制部署(主要用在生产)
推荐安装,从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。
Kubeadm方式搭建
一、准备环境
1.1 服务器要求:
1、三台服务器:1个master:192.168.50.10,2个node:192.168.50.11、192.168.50.13 建议最小硬件配置:2核cpu、2G内存、30G硬盘
2、可以访问外网
3、服务器之间网络互通(在一个网段)
4、安装阿里云yum源(阿里云yum可以下载k8s的flannel组件)
1.2 软件环境:centos7.x_x64、docker-ce v20、k8s v1.22.3
1.3 服务器整体规划
单master集群
二、服务器环境初始化
关闭防火墙(清空防火墙规则)
systemctl stop firewalld
systemctl disable firewalld
关闭selinux(关闭安全机制)
setenforce 0 #临时关闭
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config #永久
关闭swap(必须关闭)
swapoff -a #临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
设置hostname
192.168.50.10
hostnamectl set-hostname k8s-master
192.168.50.11
hostnamectl set-hostname k8s-node1
192.168.50.13
hostnamectl set-hostname k8s-node2
添加host:(在host文件末尾添加)
cat >> /etc/hosts <<EOF
192.168.50.10 k8s-master
192.168.50.11 k8s-node1
192.168.50.13 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
EOF
sysctl --system #生效
时间同步:
yum install -y ntpdate
ntpdate us.pool.ntp.org
添加k8s yum源
cat >/etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes Repo
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
安装kubelet、kubeadm、kubectl
yum install -y kubelet-1.22.3 kubeadm-1.22.3 kubectl-1.22.3
systemctl enable kubelet
三、快速部署K8S集群
master节点
kubeadm init \
--apiserver-advertise-address=192.168.50.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.22.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
kubeadm init的引导过程:
检查系统环境是否满足
下载镜像
为kubelet创建配置文件并启动
为apiserver、etcd生成证书(/etc/kubernetes/pki)
生成连接apiserver的kubeconfig文件
容器启动master组件
将涉及的配置文件存储到configmap
设置master节点不可调度(打污点)
启用boostrap自动为kubelet颁发证书
安装插件:coreDNS、kube-proxy
提示拷贝连接集群的配置文件
拷贝连接集群的配置文件admin.conf:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
node节点
向集群添加新节点,执行kubeadm init输出的kubeadm join命令:
kubeadm join kubeadm join 192.168.50.10:6443 --token iukvkm.x2w42yvm5ctlqo5p --discovery-token-ca-cert-hash sha256:650a0636e03ac97de14a61ccc8dc99ebecfac412c16af74a7912968d0a95b3e2
#如果当时没记下这个命令,可以用kubeadm命令重新生成:kubeadm token create --print-join-command
kubectl get node #查看集群节点状态
kubectl get pods -n kube-system #查看pod状态 -n 指定命名空间
kubectl get ns #查看命名空间
k8s日志位置:/var/log/messages
清空k8s环境:(如果k8s安装出错,想重新安装。master、node都执行)
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
四、安装pod网络插件(CNI) master执行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
确保能够访问到quay.io这个registry(需要用阿里云yum源才可访问下载)
(如果pod镜像下载失败,可以改成这个镜像地址(在kube-flannel.yml文件中):lizhenliang/flannel:v0.11.0-amd64)
kubectl get pod --all-namespaces //查看pod是否是running状态
kubectl get nodes 查看节点信息
五、部署UI界面(master执行)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
默认dashboard只能集群内部访问,修改Service为Nodeport类型,暴露到外部
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30001
selector:
k8s-app: kubernetes-dashboard
访问地址:https://192.168.50.10:30001
kubectl get svc -n kubernetes-dashboard #查看命名空间下pod的对外端口等信息
获取登录dashboard的token
kubectl describe secret -n kubernetes-dashboard //详细查看dashboard的token
创建service account并绑定默认cluster-admin管理员集群角色:
kubectl create serviceaccount dashboard-admin -n kube-system #创建账号
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin #将账号绑定到系统角色上
kubectl descibe secrets -n kube-system dashboard-admin #获取账号产生的token,使用输出的token登录dashboard
替换自签证书:解决k8s UI界面只能在火狐浏览器访问的问题
证书分为:
1、自签证书 cfssl、openssl
2、权威机构颁发,例如赛门铁克、沃通
kubeadm部署
1、删除默认的secret,用自签证书创建新的secret
kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/apiserver.key --from-file=/etc/kubernetes/pki/apiserver.crt
2、修改dashboard.yaml文件,在args下面增加证书俩行
args:
- --auto-generate-certificates
- --tls-key-file=apiserver.key
- --tls-cert-file=apiserver.crt
kubectl apply -f kubernetes-dashboard.yaml #让yaml文件生效
测试:创建nginx测试集群
kubectl create deployment nginx --image=nginx #创建pod
kubectl expose deployment nginx --port=80 --type=NodePort #暴露服务
kubectl get deploy,pod,svc #查看资源信息
作者:等风来~~
本博客所有文章仅用于学习、研究和交流目的,欢迎转载。
如果觉得文章写得不错,或者帮助到您了,请点个赞。
如果文章有写的不足的地方,请你一定要指出,因为这样不光是对我写文章的一种促进,也是一份对后面看此文章的人的责任。谢谢。