利用kubeadm部署一个k8s集群(单Master)

利用kubeadm部署一个k8s集群(单Master),第1张

利用kubeadm部署一个k8s集群(单Master) 一. 系统环境说明 OSCentOS 7.9containerDocker CE 20.10.6KubernetesKubernetes v1.20Kernel5.4.152-1.el7.elrepo.x86_64CPU2 核或更多RAM2 GB或更多Hard disk30GB或更多 二. 服务器规划 角色IPk8s-master110.10.1.100k8s-node110.10.1.102k8s-node210.10.1.103 三. *** 作系统初始化配置 1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2. 关闭selinux
#永久
sed -i 's/enforcing/disabled/' /etc/selinux/config

#临时
setenforce 0
3. 关闭swap
#永久
sed -ri 's/.*swap.*/#&/' /etc/fstab

#临时
swapoff -a

4. 根据规划设置主机名
hostnamectl set-hostname 
5. 根据规划,在Master添加hosts解析
cat >> /etc/hosts << EOF
10.10.1.100 k8s-master1
10.10.1.102 k8s-node1
10.10.1.103 k8s-node2
EOF
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
7. 时间同步
yum install -y ntpdate
ntpdate time.windows.com

#添加到定时任务
cat >> /var/spool/cron/root < #time sync
> */5 * * * * /usr/bin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
> EOF
四. 开始部署K8s集群 1. 安装Docker/kubeadm/kubelet【所有节点】 1.1. 安装Docker
#获取阿里云的docker yum软件源
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-20.10.6

#启动并设置开机自启
systemctl enable docker && systemctl start docker
1.2. 配置阿里云镜像下载加速
#创建文件存放目录
mkdir -p /etc/docker

#创建daemon.json(可以换成自己的阿里云镜像加速地址)
cat > /etc/docker/daemon.json << EOF
{
 "registry-mirrors": ["https://n52tl92t.mirror.aliyuncs.com"]
}
EOF

#重启Docker
systemctl restart docker

#查看docker信息
docker info
1.3. 添加阿里云的kubernetes 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
EOF
1.4. 安装kubeadm,kubelet和kubectl

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

#安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0

#将kubelet加入开机自启
systemctl enable kubelet
2. 部署Kubernets Master【Master节点】 2.1. Kubeadm初始化master节点
kubeadm init 
--apiserver-advertise-address=10.10.1.100 
--image-repository registry.aliyuncs.com/google_containers 
--kubernetes-version v1.21.0 
--service-cidr=10.96.0.0/12 
--pod-network-cidr=10.244.0.0/16 
--ignore-preflight-errors=all

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

2.2. 拷贝kubectl使用的连接k8s认证文件到默认路径
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. 添加Node 3.1. 生成token

注:默认token有效期为24小时,过期重新生成即可

kubeadm token create --print-join-command
3.2. 添加Node

注:当发现kubeadm join失败时,使用kubeadm reset清空join *** 作,然后重新初始化。

kubeadm join 10.10.1.100:6443 --token jve9md.h6tly2r9sksi9fs5 
--discovery-token-ca-cert-hash sha256:43884795837fc2527ba8c05ca33e28aa7c998ef5e61b75a43ec5a170a431506a
3.3. 在master节点查看节点信息

注:由于网络插件还没有部署,状态为NotReady

[root@k8s-master1 ~]# kubectl get nodes
NAME          STATUS     ROLES                  AGE     VERSION
k8s-master1   NotReady   control-plane,master   31m     v1.21.0
k8s-node1     NotReady                    6m26s   v1.21.0
k8s-node2     NotReady                    6m22s   v1.21.0
[root@k8s-master1 ~]#
4. 部署calico网络插件 4.1. 解决镜像问题【所有节点】
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.0
docker tag registry.aliyuncs.com/google_containers/coredns:1.8.0  registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
4.2. 部署calico网路插件【Master节点】

说明:等Calico Pod都Running,节点就会是Ready

#获取calico yaml
wget https://docs.projectcalico.org/manifests/calico.yaml

#部署
kubectl apply -f calico.yaml

#查看calico pod状态
kubectl get pods -n kube-system
5. 测试kubernetes集群【Master节点】

说明:在Kubernetes集群中创建一个pod,验证是否正常运行。
访问地址:http://NodeIP:Port,例如http://10.10.1.102:32468

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
五. 部署Dashboard【Master节点】 1.部署Dashboard

Dashboard是官方提供的一个UI,可用于基本管理K8s资源。
访问地址:https://NodeIP:30001

#获取Dashboard yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml -O kubernetes-dashboard.yaml

#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部。
vim kubernetes-dashboard.yaml
...
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort
...

#部署Dashboard
kubectl apply -f recommended.yaml

#查看Dashboard pod状态
kubectl get pods -n kubernetes-dashboard
2. 创建service account并绑定默认cluster-admin管理员集群角色
# 创建用户
[root@k8s-master1 ~]# kubectl create serviceaccount dashboard-admin -n kube-system

# 用户授权
[root@k8s-master1 ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

# 获取用户登录Token
[root@k8s-master1 ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print }')

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3995094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-22
下一篇 2022-10-22

发表评论

登录后才能评论

评论列表(0条)

保存