K8s集群的环境部署

通过 kubeadm 进行部署

1.测试环境所需要的主机名和IP和扮演的角色

harbor 172.25.254.200 harbor仓库

k8s-master 172.25.254.100 k8s集群控制节点

k8s-node1 172.25.254.10 k8s集群工作节点

k8s-node2 172.25.254.20 k8集群工作节点

注意:所有节点禁用selinux和防火墙

所有节点同步时间和地址解析

所有节点安装docker

所有节点禁用swap 注意注释掉/etc/fstab文件中的定义

为什么禁用swap?

内存速度远快于 Swap,使用 Swap 会导致性能下降,影响节点和应用响应速度。

Kubernetes 依赖 kubelet 管理节点资源,而 kubelet 默认无法有效处理 Swap,可能导致资源分配错误。

Swap 可能延迟内存压力的响应,导致节点或 Pod 进入不稳定状态。

关闭所有节点的火墙和禁用iptables

1.master 和node harbor禁用swap

swapon -s#查看磁盘名

Filename                Type        Size        Used        Priority
/dev/dm-1                               partition    2097148        0        -2

]# systemctl mask swap.target

]# swapoff -a

]# vim /etc/fstab

#/dev/mapper/rhel-swap swap swap defaults 0 0

/dev/cdrom /media iso9660 defaults 0 0

2.master和node harbor都做本地解析

[root@k8s-master ~]# vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.25.254.100 k8s-master.timinglee.org

172.25.254.10 k8s-node1.timinglee.org

172.25.254.20 k8s-node2.timinglee.org

172.25.254.254 reg.timinglee.org

3.master和node harbor都安装docker

[root@k8s-master ~]# vim /etc/yum.repos.d/docker.repo

[docker] name=docker

baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/

gpgcheck=0

[root@k8s-master ~]# dnf install docker-ce -y

4.所有节点设定 docker资源管理模式为systemd

[root@k8s-master ~]# vim /etc/docker/daemon.json

{

"registry-mirrors": ["https://reg.timinglee.org"],

"exec-opts": ["native.cgroupdriver=systemd"],

"log-driver": "json-file",

"log-opts": {

                "max-size": "100m"

},

  "storage-driver": "overlay2"

}

4.复制harbor仓库中的证书并启动docker

 k8s-master:#mkdir /etc/docker/certs.d/reg.timinglee.org/ -p

harbor:#scp /data/certs/timinglee.org.crt root@172.25.254.100:/etc/docker/certs.d/reg.timinglee.org/ca.crt

同时把密钥拷给所有node节点

确保master和所有节点都能访问harbor仓库

5.安装k8s部署工具

添加软件仓库中k8s源

[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo

[k8s] name=k8s

baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm

gpgcheck=0

#安装软件 [root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y

4.设置kubectl命令补全功能

[root@k8s-master ~]# dnf install bash-completion -y 

[root@k8s-master ~]# echo "source > ~/.bashrc

[root@k8s-master ~]# source ~/.bashrc

5.在master节点拉取k8s所需要的镜像

kubeadm config print init-defaults

手动指定镜像下载位置和容器管理接口

kubeadm config images pull \

--image-repository registry.aliyuncs.com/google_containers \  #拉取镜像的位置现在我们所用的为aliyun的

--kubernetes-version v1.30.0 \  #需要的版本

--cri-socket=unix:///var/run/cri-dockerd.sock   #拉取需要连接容器控制器使用

先在master登录harbor仓库

拉取结束上传至我们的harbor仓库

[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \ | awk -F "/" '{system("docker  tag "$0" reg.timinglee.org/k8s/"$3)}'

[root@k8s-master ~]# docker images | awk '/k8s/{system("docker push "$1":"$2)}'

6..在节点安装cri-docker

k8s从1.24版本开始就移除了dockershim 所以节点安装cri-docker插件才能使同docker

在节点安装插件和插件依赖性用docker管理k8s 和docker依赖

vim/lib/systemd/system/cri-docker.service#编写该文件夹 加上网络插件和根容器

指定网络插件名称及基础容器镜像 ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --networkplugin=cni --pod-infra-container-image=reg.timinglee.org/k8

systemctl daemon-reload

以上操作master和node节点都要做

例:scp -r /lib/systemd/system/cri-docker.service  @root172.25.254.10:/lib/systemd/system/cri-docker.service

7.集群初始化

#kubeadm init --pod-network-cidr=192.188.0.0/16 \  #初始化并设定容器集群的网络

--image-repository reg.timinglee.org/k8s \  #

--kubernetes-version v1.30.0 \ #指k8s版本

--cri-socket=unix:///var/run/cri-dockerd.sock #指定插件使docker和k8s结合到一起使用

#kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock重置集群

8.指定主配置文件

#指定集群配置文件变量 [

root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile

初始化完成

9.安装网络插件

导入flannel插件 和 kube-flannel.yml

将网络插件导入到本地docker仓库 并且上传到harbor仓库中

kubectl apply -f kube-flannel.yml 安装flannel.yml

10.节点扩容

1.禁用swap

2.安装kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0

docker-ce

cri-dockerd#连接docker和k8s 的 还有一个依赖

修改cri-dockerd启动文件添加 vim /lib/systemd/system/cri-docker.service

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --networkplugin=cni --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9

5 启动服务 kubelet.service cri-docker.service

root@k8s-node1 & 2 ~]# kubeadm join 172.25.254.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery-token-ca-cert-hash sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --crisocket=unix:///var/run/cri-dockerd.soc

部署 Kubernetes (K8S) 集群环境可以采用多种方式,包括使用云服务商工具(如 AWS 的 EKS、Azure 的 AKS、Google Cloud 的 GKE)、使用 `kops` 工具进行自动化部署,或者通过手动安装的方式搭建集群。以下将重点介绍手动部署 K8S 集群的基本步骤和关键配置。 ### 准备工作 1. **节点准备**:确保所有节点之间网络互通,并能够访问互联网以下载必要的镜像和组件。 2. **系统要求**: - 操作系统:推荐使用 CentOS 7 或 Ubuntu 20.04 及以上版本。 - 内核版本:建议使用 4.0 以上的内核版本。 - 安装 Docker:确保每个节点上已安装 Docker 引擎。 3. **关闭防火墙和服务**: ```bash systemctl stop firewalld systemctl disable firewalld ``` 4. **禁用 SELinux**(仅适用于 CentOS): ```bash setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config ``` 5. **关闭 Swap 分区**: ```bash swapoff -a sed -i '/swap/d' /etc/fstab ``` ### 安装 Kubernetes 组件 1. **添加 Kubernetes 仓库**: ```bash cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF ``` 2. **安装 kubelet、kubeadm 和 kubectl**: ```bash yum install -y kubelet kubeadm kubectl systemctl enable --now kubelet ``` ### 初始化主节点 1. **初始化集群**: ```bash kubeadm init --pod-network-cidr=192.168.0.0/16 ``` 这里使用了 `--pod-network-cidr` 参数来指定 Pod 网络的 CIDR 范围,具体值可以根据实际需求调整。 2. **配置 kubectl**: ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` ### 安装网络插件 1. **安装 Calico 网络插件**: ```bash kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml ``` 安装完成后,可以通过以下命令检查网络插件的状态: ```bash kubectl get pods -n kube-system ``` 如果看到 `calico-node` 的 Pod 处于 Running 状态,则说明网络插件部署成功。 ### 添加工作节点 1. **获取加入命令**: 在主节点上执行以下命令,获取加入集群所需的命令: ```bash kubeadm token create --print-join-command ``` 2. **在工作节点上执行加入命令**: 将上一步获取到的命令复制到工作节点上执行,例如: ```bash kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` ### 验证集群状态 1. **查看节点状态**: ```bash kubectl get nodes ``` 确保所有节点的状态均为 Ready。 2. **创建测试服务**: 创建一个简单的 Nginx 服务以验证集群功能: ```bash kubectl create deployment nginx --image=nginx:1.14-alpine kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort ``` 3. **查看服务和 Pod**: ```bash kubectl get pod,svc ``` ### 用户权限管理 1. **创建用户**: ```bash kubectl create serviceaccount dashboard-admin -n kube-system ``` 2. **用户授权**: ```bash kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin ``` 3. **获取用户 Token**: ```bash kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}') ``` ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值