搭建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 #查看资源信息


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM