kubeadm搭建单master k8s集群

                                          kubeadm搭建单master k8s集群

一、准备环境

软件环境:

软件

版本

操作系统

CentOS7.9_x64

内核

kernel-ml-5.17.3-1.el7

Docker

docker-ce-20.10.14-3.el7.x86_64

Kubernetes

v1.23

 

服务器规划:

主机名(角色)

IP

CPU

内存

K8s-master

192.168.20.211

2核

4G

K8s-node1

192.168.20.212

4核

8G

K8s-node2

192.168.20.213

4核

8G

K8s-node3

192.168.20.214

4核

8G

K8s-node4

192.168.20.215

4核

8G

 

二、环境初始化(所有主机)

  1. 关闭防火墙

            systemctl stop firewalld

            systemctl disable firewalld

    2.关闭selinux

           sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久

           setenforce 0  # 临时

     3.关闭swap

           swapoff -a  # 临时

           sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

     4.修改主机名

           hostnamectl set-hostname <hostname>

           cat >> /etc/hosts << EOF

           192.168.20.211 k8s-master

           192.168.20.212 k8s-node1

           192.168.20.213 k8s-node2

           192.168.20.214 k8s-node3

           192.168.20.215 k8s-node4

           EOF

     5.将桥接的IPv4流量传递到iptables的链

          cat > /etc/sysctl.d/k8s.conf << EOF

net.ipv4.ip_forward=1

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-arptables = 0

EOF

          sysctl --system  # 生效

     6.时间同步

          yum install ntpdate -y

   ntpdate time.windows.com

   echo "0 * * * * ntpdate time.windows.com " >> /etc/crontab

三、安装docker

  1. 卸载之前的docker

            yum remove docker \

                  docker-client \

                  docker-client-latest \

                  docker-common \

                  docker-latest \

                  docker-latest-logrotate \

                  docker-logrotate \

                  docker-engine

        2.安装docker

          # 安装依赖包

     yum install -y yum-utils

   # 添加Docker软件包源

     yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

   # 安装Docker CE

     yum install -y docker-ce

   # 启动Docker服务并设置开机启动

     systemctl start docker

     systemctl enable docker

   3.配置镜像加速器

     cat > /etc/docker/daemon.json << EOF

{

"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],

"exec-opts": ["native.cgroupdriver=systemd"]

}

 EOF

systemctl restart docker

docker info

四、安装kubeadm,kubelet和kubectl

  1. 添加阿里云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

 

2.安装kubeadm,kubelet和kubectl

   yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

    systemctl enable kubelet

五、部署Kubernetes Mastermaster节点

    kubeadm init \

  --apiserver-advertise-address=192.168.20.211 \

  --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 \

  --ignore-preflight-errors=all

  • --apiserver-advertise-address 集群通告地址
  • --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
  • --kubernetes-version K8s版本,与上面安装的一致
  • --service-cidr 集群内部虚拟网络,Pod统一访问入口
  • --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

 

如果报此错误请排查第二步的初始化过程都执行过,如果没有执行,先执行第二 、步后在执行安装master,第二步的任何一个步骤没执行都会报此错误

初始化完成后,最后会输出一个join命令先记住添加node节点要

 

拷贝kubectl使用的连接k8s认证文件到默认路径:

 

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

 

注:由于网络插件还没有部署,还没有准备就绪 NotReady

六、加入node节点(所有node主机)

  所有node主机执行下图的命令

 

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:

kubeadm token create --print-join-command

七、部署容器网络(CNI)

  Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。

下载YAML:

curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O

下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 --pod-network-cidr指定的一样。

修改完后文件后,部署:

kubectl apply -f calico.yaml

kubectl get pods -n kube-system

Calico Pod都Running,节点也会准备就绪

八、CoreDNS问题处理:

kubectl get pods -n kube-system

NAME                                      READY   STATUS             RESTARTS   AGE

calico-kube-controllers-8db96c76-z7h5p     1/1     Running            0          16m

calico-node-pshdd                          1/1     Running            0          16m

calico-node-vjwlg                          1/1     Running            0          16m

coredns-545d6fc579-5hd9x                   0/1     ImagePullBackOff   0          16m

coredns-545d6fc579-wdbsz                   0/1     ImagePullBackOff   0          16m

在所有节点执行:

docker pull registry.aliyuncs.com/google_containers/coredns:1.8.0

docker tag registry.aliyuncs.com/google_containers/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0

过一会儿,CoreDNS Pod会自动恢复正常。

以后所有yaml文件都只在Master节点执行。

九、部署 Dashboard

   Dashboard是官方提供的一个UI,可用于基本管理K8s资源。

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:

vi recommended.yaml

...

kind: Service

apiVersion: v1

metadata:

  labels:

    k8s-app: kubernetes-dashboard

  name: kubernetes-dashboard

  namespace: kubernetes-dashboard

spec:

  ports:

    - port: 443

      targetPort: 8443

      nodePort: 30001

  selector:

    k8s-app: kubernetes-dashboard

  type: NodePort

...

 

kubectl apply -f recommended.yaml

kubectl get pods -n kubernetes-dashboard

 

访问地址:https://NodeIP:30001

 

创建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

# 获取用户Token

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

使用输出的token登录Dashboard。

 

 

 

 

posted @ 2022-04-18 19:44  愤怒的小白~  阅读(204)  评论(0编辑  收藏  举报