使用kubeadm部署一个K8s集群

  • Post author:
  • Post category:其他




1.前言

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

这个工具能通过两条指令完成一个kubernetes集群的部署:



2. 安装要求

一台或多台机器,操作系统 CentOS7.x-86_x64

硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多

集群中所有机器之间网络互通

可以访问外网,需要拉取镜像

禁止swap分区



3. 实验安排

角色 IP

k8s-master 192.168.91.134

k8s-node1 192.168.91.135



4. 配置三台服务器的环境


4.1 关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld


4.2 关闭selinux:

sed -i 's/enforcing/disabled/' /etc/selinux/config  
setenforce 0  


4.3 关闭swap

swapoff -a  
sed -i 's/.*swap.*/#&/' /etc/fstab


4.4 设置主机名

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1


4.5 在所有主机添加hosts

 cat >> /etc/hosts << EOF
192.168.91.134 k8s-master
192.168.91.135 k8s-node1
EOF


4.6 将桥接的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  


4.7 服务器做时间同步

yum install ntpdate -y

同步时间

ntpdate ntp.aliyun.com



5. 所有节点安装Docker/kubeadm/kubelet

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


5.1 安装docker


获取docker的阿里云源

安装wget命令

yum -y  install wget

获取阿里云的源

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并设为开机自启

systemctl enable docker && systemctl start docker

查看docker版本

docker --version

配置镜像加速

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

重启docker服务

systemctl restart docker


5.2 编辑阿里云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


5.3 安装kubeadm,kubelet和kubectl


由于版本更新频繁,这里指定版本号部署:

yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0

将kubelet设为开机自启,先不启动

systemctl enable kubelet



6. 部署Kubernetes Master

在192.168.91.134 (Master)执行

kubeadm init \
  --apiserver-advertise-address=192.168.91.134 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.20.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

初始化成功之后出现以下界面

在这里插入图片描述

解释

–apiserver-advertise-address集群通告地址

–image-repository 默认镜像地址无法访问,这里指阿里云镜像仓库地址

–kubernetes-version K8s版本,与上面安装的一致

–service-cidr 集群内部虚拟网络,pod统一访问入口

–pod-network-cidr pod网络

执行命令:

拷贝kubectl所需的配置文件:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config


6.1在node节点执行后node就会加入集群

[root@node1 ~]# kubeadm join 192.168.91.134:6443 --token o8s41y.8v46mwuf39nmai6q \--discovery-token-ca-cert-hash sha256:e2a7f4f11bb2c630aa8569b287b55224f1f3f3c727200a800672d45b92d47c31

在这里插入图片描述

Kubeadm init工作流程

1.[preflight]环境检查,拉取镜像

2.[certs]证书生成与kubeconfig文件生成

3.[kubeconfig]kubeconfig文件生成

4.[kubelet-start]启动kubelet

5.[control-plane]静态pod启动master组件,包括了etcd

6.[mark-control-plane]给master节点打一个标签

7.[bootstrap-token]引导kubelet生成证书

8.[addons]安装coredns和kubeproxy生成了用于工作节点连接master的命令



7. 安装Pod网络插件(CNI)

Calico是一个纯三层的数据网络中心方案

下载YAML

 wget https://docs.projectcalico.org/manifests/calico.yaml
 kubectl apply -f calico.yaml

等待pods状态全部running

 kubectl get pods -n kube-system
NAME                                       READY   STATUS                  RESTARTS   AGE
calico-kube-controllers-79bc685f4c-28nvb   1/1     Running                 0          8m12s
calico-node-db4dg                          1/1     Running                 0          8m12s
calico-node-wfw2m                          1/1     Running                 0          8m12s
coredns-9d85f5447-k5flv                    1/1     Running                 0          31m
coredns-9d85f5447-mmz2p                    1/1     Running                 0          31m
etcd-k8s-master                            1/1     Running                 0          31m
kube-apiserver-k8s-master                  1/1     Running                 0          31m
kube-controller-manager-k8s-master         1/1     Running                 0          31m
kube-proxy-9gtsv                           1/1     Running                 0          15m
kube-proxy-kvklr                           1/1     Running                 0          31m
kube-scheduler-k8s-master                  1/1     Running                 0          31m



8. 部署 Dashboard


8.1 在master节点上执行命令

Wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml


8.2 修改recommended.yaml配置文件

vim recommended.yaml

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

38   namespace: kubernetes-dashboard
 39 spec:
 40   ports:
 41     - port: 443
 42       targetPort: 8443
 43       nodePort: 30001
 44   selector:
 45     k8s-app: kubernetes-dashboard
 46   type: NodePort
 47 ---
 48
 49 apiVersion: v1
 50 kind: Secret


8.3 在master节点上执行以下命令:


创建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 describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')


8.4 访问地址:https://nodeip:30001 (注意:用的是https)


在这里插入图片描述



版权声明:本文为lubenweikaigua原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。