kubeadm安装k8s集群

kubeadm安装k8s集群

1、准备工作

(1)设置hosts文件

每个节点编辑/etc/hosts 文件,如添加:

bash 复制代码
192.168.2.1 node1
192.168.2.2 node2
192.168.2.3 node3
192.168.2.4 node4

(2)设置hostname

依次在每个节点执行以下命令修改主机名:

bash 复制代码
hostnamectl set-hostname  node1

(3)执行时间同步

所有节点执行时间同步:

bash 复制代码
# 启动chronyd服务
systemctl start chronyd
systemctl enable chronyd
date

启动chronyd服务,完成后执行date命令查看时间同步情况。

(4)禁用防火墙和selinux

bash 复制代码
所有节点禁用SELinux和Firewalld服务:
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config # 重启后生效

(5)禁用swap分区

bash 复制代码
# 临时禁用swap分区
swapoff -a

# 永久禁用swap分区
vi /etc/fstab 
# 注释掉下面的设置
# /dev/mapper/centos-swap swap
# 之后需要重启服务器生效

(6)网桥过滤和地址转发

bash 复制代码
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

# 然后执行,生效
sysctl --system

(7)安装docker-ce

所有节点安装docker-ce:

bash 复制代码
curl -fsSL get.docker.com | bash -s docker --mirror Aliyun

配置docker的cgroupdriver:

bash 复制代码
# 在/etc/docker/daemon.json中添加
{
  // 添加这行
  "exec-opts": ["native.cgroupdriver=systemd"],
}

然后重启docker:

bash 复制代码
systemctl restart docker

(8)kubernetes镜像切换成国内源

所有节点的kubernetes镜像切换成国内源:

bash 复制代码
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

安装kubeadm,kubelet 和 kubectl

所有节点执行:

bash 复制代码
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

kubelet开机自启动:

bash 复制代码
systemctl enable kubelet

2、更改kubelet的容器路径(可跳过)

安装完成后,执行命令修改指定文件:

bash 复制代码
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

修改完之后配置文件如下:

bash 复制代码
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --root-dir=/mnt/sdb_new/kubelet/ --kubeconfig=/etc/kubernetes/kubelet.conf"

修改完成后,生效:

bash 复制代码
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

3、部署kubeadm集群

(1)覆盖kubernetes的镜像地址(只需要在master节点上操作初始化命令)

使用此命令列出集群在配置过程中需要哪些镜像:

bash 复制代码
kubeadm config images list

更改为阿里云的镜像地址:

bash 复制代码
kubeadm config images list  --image-repository registry.aliyuncs.com/google_containers

然后将镜像手动拉取下来:

bash 复制代码
kubeadm config images pull  --image-repository registry.aliyuncs.com/google_containers

(2)初始化kubernetes(只需要在master节点上操作初始化命令)

执行以下命令,进行初始化:

bash 复制代码
kubeadm init \
  --apiserver-advertise-address=192.168.2.1 \
  --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 # 集群通告地址(master 机器IP,这里用的万兆网)
# --image-repository # 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
# --kubernetes-version #K8s版本,与上面安装的一致
# --service-cidr #集群内部虚拟网络,Pod统一访问入口,可以不用更改,直接用上面的参数
# --pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致,可以不用更改,直接用上面的参数

然后依次执行以下命令给予权限:

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

执行以下命令完成命令补全功能:

bash 复制代码
vim /root/.bash_profile
加入:
# 超级用户变量
export KUBECONFIG=/etc/kubernetes/admin.conf
# 设置别名
alias k=kubectl
# 设置kubectl命令补齐功能
source <(kubectl completion bash)

激活.bash_profile:

bash 复制代码
source /root/.bash_profile

后续子节点加入到master节点需要执行:

bash 复制代码
kubeadm join 192.168.2.1:6443 --token ochspx.15in9qkiu5z8tx2y \
        --discovery-token-ca-cert-hash sha256:1f31202107af96a07df9fd78c3aa9bb44fd40076ac123e8ff28d6ab691a02a31

(3)设定kubeletl网络(主节点部署)

下载kube-flannel.yml:

bash 复制代码
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

修改配置文件:

bash 复制代码
net-conf.json: |
  {
    "Network": "10.244.0.0/16",
    "Backend"": {
      "Type": "vxlan"
  }
}

修改完后,启动组件:

bash 复制代码
kubectl apply -f kube-flannel.ym

至此 K8s master主服务器 已经部署完成!

(4)子节点加入集群(在子节点上操作)

初始化会生成join命令,需要在子节点执行即可:

bash 复制代码
kubeadm join 192.168.2.1:6443 --token ochspx.15in9qkiu5z8tx2y

默认的 join token 有效期限为24小时,创建新的join token需要在主节点上创建,创建命令:

bash 复制代码
kubeadm token create --print-join-command

加入之后再在主节点查看集群中节点的状态:

bash 复制代码
kubectl get nodes

(5)删除子节点(在master主节点上操作)

首先驱逐node3节点:

bash 复制代码
kubectl drain node3 --delete-local-data --force --ignore-daemonsets

删除node3节点:

bash 复制代码
kubectl delete node node3

子节点node3重置k8s:

bash 复制代码
kubeadm reset

然后在被删除的子节点上手动删除k8s配置文件、flannel网络配置文件 和 flannel网口:

bash 复制代码
rm -rf /etc/cni/net.d/
rm -rf /root/.kube/config
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1

(6)worker节点加入集群后无法使用kubectl命令,提示访问了8080端口被拒绝

首先将主节点中的/etc/kubernetes/admin.conf文件拷贝到从node节点相同目录下;

将主节点的/root/.bash_profile复制到worker节点;

执行命令激活配置:

bash 复制代码
source /root/.bash_profile

4、部署k8s dashboard

部署KubePI(随便在哪个节点部署)

拉取docker镜像:

bash 复制代码
docker pull kubeoperator/kubepi-server

启动容器:

bash 复制代码
docker run --privileged -itd --restart=unless-stopped --name kube_dashboard -v /home/docker-mount/kubepi/:/var/lib/kubepi/ -p 8000:80 kubeoperator/kubepi-server

浏览器登录:

bash 复制代码
 http://192.168.2.1:8000
 默认用户名:admin   默认密码:kubepi

填写apisever地址及token(主节点):

bash 复制代码
kubectl create sa kubepi-user --namespace kube-system
kubectl create clusterrolebinding kubepi-user --clusterrole=cluster-admin --serviceaccount=kube-system:kubepi-user
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubepi-user | awk '{print $1}') | grep token: | awk '{print $2}'
cat ~/.kube/config | grep server: | awk '{print $2}'

安装metrics k8s集群监控插件

下载文件:

bash 复制代码
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml

修改镜像:

bash 复制代码
sed -i 's/k8s.gcr.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml

大概 139 行的位置追加参数:

bash 复制代码
    spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        - --kubelet-insecure-tls

启动文件:

bash 复制代码
kubectl create -f metrics-server-components.yaml
相关推荐
云和数据.ChenGuang4 分钟前
微服务技术栈
微服务·云原生·架构
syty20208 分钟前
K8s是什么
容器·kubernetes·dubbo
江团1io01 小时前
微服务雪崩问题与系统性防御方案
微服务·云原生·架构
Evan Wang2 小时前
使用Terraform管理阿里云基础设施
阿里云·云原生·terraform
向上的车轮3 小时前
基于go语言的云原生TodoList Demo 项目,验证云原生核心特性
开发语言·云原生·golang
灵犀物润3 小时前
Kubernetes 配置检查与发布安全清单
安全·容器·kubernetes
360智汇云4 小时前
k8s交互桥梁:走进Client-Go
golang·kubernetes·交互
xy_recording4 小时前
Day20 K8S学习
学习·容器·kubernetes
衍余未了5 小时前
k8s 内置的containerd配置阿里云个人镜像地址及认证
java·阿里云·kubernetes
九章云极AladdinEdu5 小时前
Kubernetes设备插件开发实战:实现GPU拓扑感知调度
人工智能·机器学习·云原生·容器·kubernetes·迁移学习·gpu算力