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
相关推荐
蜜獾云14 分钟前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
年薪丰厚1 小时前
如何在K8S集群中查看和操作Pod内的文件?
docker·云原生·容器·kubernetes·k8s·container
zhangj11251 小时前
K8S Ingress 服务配置步骤说明
云原生·容器·kubernetes
岁月变迁呀1 小时前
kubeadm搭建k8s集群
云原生·容器·kubernetes
墨水\\1 小时前
二进制部署k8s
云原生·容器·kubernetes
Source、1 小时前
k8s-metrics-server
云原生·容器·kubernetes
上海运维Q先生1 小时前
面试题整理15----K8s常见的网络插件有哪些
运维·网络·kubernetes
颜淡慕潇2 小时前
【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
后端·云原生·容器·kubernetes
ProtonBase2 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
大熊程序猿4 小时前
K8s证书过期
云原生·容器·kubernetes