kubeadm概述

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

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

# 创建一个 Master 节点
$ kubeadm init

# 将一个 Node 节点加入到当前集群中
$ kubeadm join <Master节点的IP和端口 >

安装要求

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  • 禁止swap分区

准备环境

角色IP
k8smaster192.168.80.100
k8snode1192.168.80.101

所有机器都要执行如下操作

#各个机器设置自己的域名
hostnamectl set-hostname xxxx

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

#关闭swap
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab

#允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

安装kubelet、kubeadm、kubectl

kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
   http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF


sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

sudo systemctl enable --now kubelet

kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环

image-20221211125028614

使用kubeadm引导集群

下载各个机器需要的镜像

下载镜像较多,使用脚本一次运行自动下载

sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/czs-k8s/$imageName
done
EOF
   
chmod +x ./images.sh && ./images.sh

初始化主节点

#所有机器添加master域名映射,以下需要修改为自己的
echo "192.168.80.100  k8smaster" >> /etc/hosts
# 主节点初始化
# --apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是master本机IP地址
# --control-plane-endpoint: 主节点的域名
# --pod-network-cidr:用于指定pod的网络范围
# --service-cidr:用于指定SVC的网络范围
#所有网络范围不重叠

kubeadm init \
--apiserver-advertise-address=192.168.80.100 \
--control-plane-endpoint=k8smaster \
--image-repository registry.cn-hangzhou.aliyuncs.com/czs-k8s \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.172.0.0/16

执行命令之后等待完成,master成功后提示如下

image-20221211130647236

根据提示继续执行命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  
# 如果需要master添加到k8s里执行这个
kubeadm join k8smaster:6443 \
--token kjv1vv.puk52v8h9mrnqvbu \
--discovery-token-ca-cert-hash sha256:6a9ee1c650f71bec764664e6a9dece4ae020645d5b3b893167da4794fe7d4586 \
--control-plane
    
  
 # 如果需要node添加到k8s里执行这个
 kubeadm join k8smaster:6443 \
 --token kjv1vv.puk52v8h9mrnqvbu \
 --discovery-token-ca-cert-hash sha256:6a9ee1c650f71bec764664e6a9dece4ae020645d5b3b893167da4794fe7d4586 \
 --control-plane

安装网络组件

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

# 查看IP网段是否是kubeadm init的 --pod-network-cidr网络范围 如果不是需要修改
cat calico.yaml |grep 192

kubectl apply -f calico.yaml

如果安装报错calico “calico.yaml“: no matches for kind “PodDisruptionBudget“ in version “policy/v1“,这是因为calico 与 k8s版本不匹配

解决方案–安装v3.20版本的calico

curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

image-20221211131542965

常用shell命令

#查看集群所有节点
kubectl get nodes

#根据配置文件,给集群创建资源
kubectl apply -f xxxx.yaml

#查看集群部署了哪些应用?
docker ps   ===   kubectl get pods -A

# 实时查看
docker ps   ===   kubectl get pods -A -w

# watch每一秒刷新一次
watch -n 1 kubectl get pods -A

# 运行中的应用在docker里面叫容器,在k8s里面叫Pod
kubectl get pods -A

# 生成新令牌
kubeadm token create --print-join-command

测试kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行:

$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=NodePort
$ kubectl get pod,svc

访问地址:http://NodeIP:Port

image-20221211142031026

部署dashboard

部署

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
kubectl apply -f recommended.yaml

设置访问端口

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

ClusterIP 改为 type: NodePort

image-20221211142653743

找到dashboard端口

kubectl get svc -A |grep kubernetes-dashboard

访问: https://集群任意IP:端口 https://k8snode1:32759

创建访问账号

#创建访问账号,准备一个yaml文件; vi dash.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
kubectl apply -f dash.yaml

令牌访问

#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

image-20221211144250513

界面

image-20221211144458671

image-20221211144330416

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐