k8s集群搭建(一主两从,基于kubeadm)
  2NfAsFj0qBRO 2023年11月01日 43 0

安装要求:
在开始之前,部署Kubernetes集群机器需要满足以下几个条件,官方解释:

  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  • 禁止swap分区

如果嫌麻烦,后面给出了搭建好的集群虚拟机,开箱即用


一、环境准备(虚拟机)

角色 IP
master 192.168.1.21
node1 192.168.1.22
node2 192.168.1.23

接下来,请按照以下步骤依次执行,master、node1、node2都需要执行

  1. 关闭防火墙,永久禁用
systemctl disable firewalld
  1. 关闭selinux,永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
  1. 关闭swap,永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
  1. 根据规划设置主机名
# <hostname>分别修改为:master、node1、node2,分别在对应的这三台服务器执行
hostnamectl set-hostname <hostname> --static
  1. 添加hosts
cat >> /etc/hosts << EOF
192.168.1.21 master
192.168.1.22 node1
192.168.1.23 node1
EOF
  1. 将桥接的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
  1. 时间同步
yum install ntpdate -y
ntpdate time.windows.com

二、所有节点安装Docker/kubeadm/kubelet

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

1. 安装Docker

  • 下载docker包
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
  • 安装docker
yum -y install docker-ce-18.06.1.ce-3.el7
  • 启动后可以通过命令docker --version查看是否安装成功,如果显示Docker version 18.06.1-ce, build e68fc7a则是成功
systemctl enable docker && systemctl start docker

2. 配置阿里镜像仓库

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

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

4.安装kubeadm,kubelet和kubectl

  • 由于版本更新频繁,这里指定版本号部署
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
  • 添加到开机自启
systemctl enable kubelet

三、部署Kubernetes Master

  • 在192.168.1.21(Master节点)执行
  • 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
kubeadm init \
  --apiserver-advertise-address=192.168.44.146 \
  --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
  • 配置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

四、创建永久token

  • 由于默认生成的token只有24小时有效期,避免到期后不可用,提前创建永久token
  • 本命令为创建token, --ttl 0 表示永不过期
  • 命令执行后会输出最后一行p4rynu.uj4jaxnzk2s0y9vi就是生成的token
kubeadm token create --ttl 0

W0322 22:42:54.687441   18368 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
p4rynu.uj4jaxnzk2s0y9vi	
  • 可以通过如下命令,查看token列表
kubeadm token list
  • 获取集群CA证书的HASH值,最后一行输出为HASH值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outformder 2>/dev/null|openssl dgst -sha256 -hex | sed 's/^.* //'

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  • 自己创建将node加入master的命令
    • 将上面得到的token值替换如下<token>
    • 将上面得到的hash值替换如下<hash>
    • 将master节点ip值替换如下<masterIP>
 kubeadm join --token <token> <masterIP>:6443 --discovery-token-ca-cert-hash sha256:<hash>

五、加入Kubernetes Node

  • 在192.168.1.22/23(Node)执行
  • 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令,不过我们用我们自己上一步自己创建的命令
  • 用你自己创建的,别用我的,如下只是一个示例!!!
kubeadm join --token p4rynu.uj4jaxnzk2s0y9vi 192.168.1.21:6443 --discovery-token-ca-cert-hash sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

六、部署CNI网络插件

  • 执行以下命令,如果你的网络是通的则用下载的文件,否则跳过本步,用我给你的吧
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 以下是我放好的kube-flannel.yml,你也可以FQ,在浏览器下载好放到一个文件中
点击查看kube-flannel.yml文件
---
kind: Namespace
apiVersion: v1
metadata:
  name: kube-flannel
  labels:
    pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: flannel
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: flannel
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
- kind: ServiceAccount
  name: flannel
  namespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: flannel
  namespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-flannel
  labels:
    tier: node
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
  namespace: kube-flannel
  labels:
    tier: node
    app: flannel
spec:
  selector:
    matchLabels:
      app: flannel
  template:
    metadata:
      labels:
        tier: node
        app: flannel
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/os
                operator: In
                values:
                - linux
      hostNetwork: true
      priorityClassName: system-node-critical
      tolerations:
      - operator: Exists
        effect: NoSchedule
      serviceAccountName: flannel
      initContainers:
      - name: install-cni-plugin
       #image: flannelcni/flannel-cni-plugin:v1.1.0 for ppc64le and mips64le (dockerhub limitations may apply)
        image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0
        command:
        - cp
        args:
        - -f
        - /flannel
        - /opt/cni/bin/flannel
        volumeMounts:
        - name: cni-plugin
          mountPath: /opt/cni/bin
      - name: install-cni
       #image: flannelcni/flannel:v0.20.1 for ppc64le and mips64le (dockerhub limitations may apply)
        image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.1
        command:
        - cp
        args:
        - -f
        - /etc/kube-flannel/cni-conf.json
        - /etc/cni/net.d/10-flannel.conflist
        volumeMounts:
        - name: cni
          mountPath: /etc/cni/net.d
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      containers:
      - name: kube-flannel
       #image: flannelcni/flannel:v0.20.1 for ppc64le and mips64le (dockerhub limitations may apply)
        image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.1
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        resources:
          requests:
            cpu: "100m"
            memory: "50Mi"
          limits:
            cpu: "100m"
            memory: "50Mi"
        securityContext:
          privileged: false
          capabilities:
            add: ["NET_ADMIN", "NET_RAW"]
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: EVENT_QUEUE_DEPTH
          value: "5000"
        volumeMounts:
        - name: run
          mountPath: /run/flannel
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
        - name: xtables-lock
          mountPath: /run/xtables.lock
      volumes:
      - name: run
        hostPath:
          path: /run/flannel
      - name: cni-plugin
        hostPath:
          path: /opt/cni/bin
      - name: cni
        hostPath:
          path: /etc/cni/net.d
      - name: flannel-cfg
        configMap:
          name: kube-flannel-cfg
      - name: xtables-lock
        hostPath:
          path: /run/xtables.lock
          type: FileOrCreate
  • 文件放到哪里都可以,我们只用一次,在有此文件的目录执行以下命令,只在master节点执行
kubectl apply -f kube-flannel.yml
  • 执行完毕后,通过以下命令可以查看运行中的网络服务
kubectl get pods -n kube-system

七、测试kubernetes集群

  • 在Kubernetes集群中创建一个pod,验证是否正常运行:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

访问地址:http://NodeIP:Port

八、开箱即用的k8s,新鲜出炉的!

  • 使用注意:!!!基于vmware 15搭建,里面4个服务器,base的是主服务器,master、node1、node2是克隆连接,机器ip与本教程完全相同,可放心使用!

链接:https://pan.baidu.com/s/1OL2ZqlveMOmRIKEdHU-w4Q?pwd=abcd
提取码:abcd
--来自百度网盘超级会员V8的分享

  • 手机用户赶紧扫一扫获取吧!

image

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2xk0JyO908yA   2024年04月11日   46   0   0 Kubernetes
  az2L92p17wYQ   2024年04月29日   47   0   0 Kubernetes
  2xk0JyO908yA   2024年05月17日   47   0   0 Kubernetes
2NfAsFj0qBRO