一、Master和Node节点配置

1. 安装Docker服务

https://docs.aws.amazon.com/zh_cn/AmazonECS/latest/userguide/create-container-image.html

配置Docker

  1. # 添加以下内容
  2. sudo vim /etc/docker/daemon.json
  3. {
  4. "exec-opts": ["native.cgroupdriver=systemd"]
  5. }
  6. # 重载扫描
  7. sudo systemctl daemon-reload
  8. # 重启docker服务
  9. sudo systemctl restart docker

2. 安装依赖包

# 安装lsb包
sudo yum install -y redhat-lsb

# 安装常用依赖包
sudo yum install -y socat conntrack ntpdate ntp jq curl wget sysstat libseccomp vim net-tools git chrony

3. 安装k8s组件

# 添加k8s源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

# 安装组件(要和k8s版本一致)
sudo yum install -y kubeadm-1.22.7-0 kubectl-1.22.7-0 kubelet-1.22.7-0 --disableexcludes=kubernetes

# 设置kubelet自启动
sudo systemctl enable kubelet

4. 配置kubelet的cgroup

# 可以查看默认驱动
kubelet --help |grep cgroup-driver

sudo vim /etc/sysconfig/kubelet

# 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 设置kubelet开机自启,集群自动初始化完成自动拉起kubelet服务
sudo systemctl daemon-reload
sudo systemctl restart kubelet

# 在文件 /var/lib/kubelet/config.yaml 中添加设置 cgroupDriver: systemd,否则Kubeadm init将报错

二、Mater节点配置

1. 配置Hosts

# 设置主节点hostname
sudo hostnamectl set-hostname k8s-master

# 修改hosts绑定关系
sudo vim /etc/hosts
172.28.69.216 k8s-master
172.28.64.39 k8s-node1

2. kubeadm部署

sudo kubeadm init \
--apiserver-advertise-address={master_ip}  \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.7 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all

# 重新初始化 kubeadm reset # 先重置
# 重新获取join脚本   kubeadm token create --print-join-command

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

初始化之后,会输出一个join命令,先复制出来,node节点加入master会使用。

3. 拷贝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

4. 部署容器网络

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

wget https://docs.projectcalico.org/manifests/calico.yaml

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

kubectl apply -f calico.yaml
kubectl get pods -n kube-system                   #执行结束要等上一会才全部running

image.png
注:以后所有yaml文件都只在Master节点执行。
安装目录:/etc/kubernetes/
组件配置文件目录:/etc/kubernetes/manifests/

5. 部署Dashboard

Dashboard是官方提供的一个UI,可用于基本管理K8s资源。
YAML下载地址:

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

默认Dashboard只能集群内部访问,修改Service为NodePort类型(端口范围:30000-32767),暴露到外部:

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

创建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,可以用于登录k8s dashboard

参考:
https://blog.csdn.net/tiny_du/article/details/123823093
https://blog.csdn.net/omaidb/article/details/121549382