Kubernetes1

kubernetes安装部署

> 官方推荐kubeadm部署配置:2核2G内存,卸载防火墙、禁用swap

>环境部署

>```
> # 实验机清单
> harbor: 镜像仓库
>     -> 192.168.88.240        # 2CPU,4G内存
> master: 管理控制节点
>     -> 192.168.88.50        # 2CPU,4G内存
> node-0001: 计算节点1
>     -> 192.168.88.51        # 2CPU,2G内存
> node-0002: 计算节点2
>     -> 192.168.88.52        # 2CPU,2G内存
> node-0003: 计算节点3
>     -> 192.168.88.53        # 2CPU,2G内存
> ```

>#登录harbor的测试普通用户
> 用户名:user
> 密码:ABCdef123

#### 一、k8s安装

##### 安装控制节点

###### 前置软件包安装与系统环境配置

```shell
## 配置软件仓库
# 传输安装包,k8s需要containerd.io、kubeadm、kubectl、kubelet、kubernetes-cni、cri-tools
rsync -av ... 192.168.88.240:/var/ftp/rpms
# 更新本地yum仓库
createrepo --update /var/ftp/rpms/
----------------------------------------------------------start
## 系统环境配置
# 创建repo源
echo '
    [k8s]
    name=Rocky Linux $releasever - Kubernetes
    baseurl="ftp://192.168.88.240/rpms"
    enabled=1
    gpgcheck=0 ' >> /etc/yum.repos.d/k8s.repo
# 为所有实验机传输yum源
path=/etc/yum.repos.d/local.repo
for i in 5{0..3}
 do
  rsync -av $path 192.168.88.$i:$path
 done
# 禁用 firewall 和 swap
sed -i '/swap/d' /etc/fstab
swapoff -a
dnf remove -y firewalld*

## 安装工具软件包简介
#kubeadm: 集群配置工具
#kubelet: 管理pod,在集群中的每个节点上启动
#kubectl: 用来与集群通信的命令行工具
#containerd: 容器管理软件 (Runtime)
#ipvsadm: 集群管理工具
#iproute-tc: 网络流量管理工具

# master节点安装前置包
dnf install -y kubeadm kubelet kubectl containerd.io ipvsadm ipset iproute-tc
# 配置containerd文件
containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml
    61    配置私有仓库的镜像路径
    sandbox_image = "harbor:443/k8s/pause:3.9"
    125 k8s调用containerd驱动
    SystemdCgroup = true        # 默认false,则调用Cgroupfs启动
    154 定义私有仓库地址[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://192.168.88.240:443"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"]
    endpoint = ["https://192.168.88.240:443"]    [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.88.240:443".tls]
    insecure_skip_verify = true

# 验证kubelet的cgroup驱动配置
cat /var/lib/kubelet/config.yaml | grep cgroupDriver
```

![image-20250326112715998](image-20250326112715998.png)

> ##### Kubernetes 核心组件端口及用途表
>
> | 软件名称                  | 端口范围  | 用途               |
> | ------------------------- | --------- | ------------------ |
> | `kubernetes-api`          | 6443      | 所有组件接口服务   |
> | `etcd`                    | 2379-2380 | 核心数据库         |
> | `kube-scheduler`          | 10259     | 调度服务           |
> | `kube-controller-manager` | 10257     | 控制器管理服务     |
> | `kubelet`                 | 10250     | 节点代理服务       |
> | `kube-proxy`              | 10256     | 网络通讯与负载均衡 |

###### 配置内核参数

```shell
# 查看内核模块
lsmod

# 加载内核模块
vim /etc/modules-load.d/containerd.conf
    br_netfilter
    xt_conntrack
systemctl start systemd-modules-load.service 

# 设置内核参数
vim /etc/sysctl.d/99-kubernetes-cri.conf
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.netfilter.nf_conntrack_max = 1000000
sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf
----------------------------------------------------------end
```

##### 导入 k8s 镜像

```shell
# 将init文件传输给master
rsync -av kubernetes/init 192.168.88.50:/root/
## 安装部署 docker
dnf install -y docker-ce
# 配置harbor镜像地址
vim /etc/docker/daemon.json 
    {
        "registry-mirrors":["https://harbor:443"],
        "insecure-registries":["harbor:443"]
    }
# 重启服务生效,并验证地址是否生效
systemctl enable --now docker;docker info

##上传镜像到 harbor 仓库
# 登录harbor用户
docker login harbor:443        # 输入普通用户的用户名&密码
# 导入镜像
docker load -i init/v1.29.2.tar.xz
# 上传镜像
docker images | while read i t _
  do
    [[ "${t}" == "TAG" ]] && continue
    [[ "${i}" =~ ^"harbor:443/".+ ]] && continue        # 从仓库下载的镜像带有harbor:443,跳过
    docker tag ${i}:${t} harbor:443/k8s/${i##*/}:${t}
    docker push harbor:443/k8s/${i##*/}:${t}
    docker rmi ${i}:${t} harbor:443/k8s/${i##*/}:${t}
  done

# 设置 Tab 键补全命令
source <(kubeadm completion bash|tee /etc/bash_completion.d/kubeadm)
source <(kubectl completion bash|tee /etc/bash_completion.d/kubectl)
# 上述两条命令用于Bash自动补全功能,即kubeadm子命令自动补全,提高工作效率
```

##### master 安装集群并启动

```shell
# 修改master
vim +13 /root/init/init.yaml
    advertiseAddress: 192.168.88.50    #修改为master的ip
# 测试系统环境
kubeadm init --config=init/init.yaml --dry-run 2>error.log
# 测试正常error不会有任何内容
cat error.log
# 主控节点初始化
rm -rf error.log /etc/kubernetes/tmp
kubeadm init --config=init/init.yaml | tee init/init.log

## 管理授权,如果缺少授权,执行命令会报错权限不足
# 如果上述命令执行报错,说明前面步骤有误,会输出:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/tmp/kubeadm-init-dryrun1749378166/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 若前面执行成功,会输出:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
将输出的三条命令重新输入执行授权

# 验证节点工作状态
kubectl get nodes
```

执行成功后终端输出结果

<img src="image-20250326134459766.png" alt="image-20250326134459766" style="zoom:150%;" />

###### 至此——k8s集群部署完毕

--------------

> ###### kubeadm工具
>
> | 命令选项 | 命令说明                           |
> | -------- | ---------------------------------- |
> | `config` | 镜像管理命令                       |
> | `init`   | 集群初始化命令                     |
> | `reset`  | 还原、删除集群配置                 |
> | `join`   | 计算节点加入集群                   |
> | `token`  | Token 凭证管理,管理加入集群的凭证 |
> | `help`   | 命令帮助信息                       |
>
> 如果前面创建集群命令执行失败,执行reset初始化集群至配置前

#### 二、安装网络插件

> 查看节点:kubectl get nodes
> 显示notready,未上线需要网络

```shell
# 拷贝插件并上传镜像
rsync -av kubernetes/plugins/calico 192.168.88.50:/root/
docker load -i plugins/calico/calico.tar.xz
docker images | while read i t _
  do
    [[ "${t}" == "TAG" ]] && continue
    [[ "${i}" =~ ^"harbor:443/".+ ]] && continue
    docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}
    docker push harbor:443/plugins/${i##*/}:${t}
    docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
  done
```

##### 安装部署插件 calico

```shell
grep -n image: calico.yaml    # 清单文件
4642:          image: docker.io/calico/cni:v3.26.4
4670:          image: docker.io/calico/cni:v3.26.4
4713:          image: docker.io/calico/node:v3.26.4
4739:          image: docker.io/calico/node:v3.26.4
4956:          image: docker.io/calico/kube-controllers:v3.26.4

# 查看清单文件image显示官方github地址,修改地址为harbor地址下的plugins分支
sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' calico.yaml

grep -n image: calico.yaml    # 再次执行查看修改
4642:          image: harbor:443/plugins/cni:v3.26.4
4670:          image: harbor:443/plugins/cni:v3.26.4
4713:          image: harbor:443/plugins/node:v3.26.4
4739:          image: harbor:443/plugins/node:v3.26.4
4956:          image: harbor:443/plugins/kube-controllers:v3.26.4
```

#### 三、token管理

##### 获取凭证

```shell
## k8s集群的凭证管理操作
# 查看token凭证有效期
kubeadm token list        # 得到一个有期限为21小时的凭证
# 删除旧token
kubeadm token delete abcdef.0123456789abcdef
# 创建永久token凭证,并记录返回的命令
kubeadm token create --ttl=0 --print-join-command
#--ttl=0:令牌永久有效(查询结果显示为<forever>)
#--print-join-command:直接输出节点加入集群的命令

kubeadm join 192.168.88.50:6443 --token tonuv1.cqiayofavyb029y8 --discovery-token-ca-cert-hash sha256:66cacdaeee2993132efbf6bbf360cafcbbc36a72138c198fc5ca444e1327eb15

# 若丢失sha256,使用以下命令通过openssl计算得到hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der | openssl dgst -sha256 -hex

### 为集群添加计算节点
在node[1-3]三台实验机上重新执行命令:从虚线start到虚线end结束
# 验证节点工作状态
最后在master管理节点上查看: kubectl get nodes     # 稍等1分钟,等待分配ip配置网络
# 验证容器工作状态
kubectl -n kube-system get pods
```

###### ansible自动化添加集群计算节点

```shell
- hosts: all
  vars:
    master: "192.168.88.50:6443"
    token: "--token tonuv1.cqiayofavyb029y8 --discovery-token-ca-cert-hash"
    token_hash: "sha256:66cacdaeee2993132efbf6bbf360cafcbbc36a72138c198fc5ca444e1327eb15"
  tasks:
# 1. 配置YUM仓库
    - yum_repository: 
        name: k8s
        description: Rocky Linux $releasever - Kubernetes
        baseurl: ftp://192.168.88.240/rpms
        enabled: 1
        gpgcheck: 0
# 2. 系统配置优化
    - replace:
        path: /etc/fstab
        regexp: '^.*swap.*$'
        replace: ''
    - yum:
        name: firewalld
        state: absent
    - shell: swapoff -a
# 3. 基础配置
# #dns解析才能dnf安装,不能加入循环
    - copy:
        src: "/etc/hosts"
        dest: "/etc/hosts"
# 4. 安装软件包 
    - yum:
        name: "{{ item }}"
        state: present
      loop:
        - kubeadm
        - kubelet
        - kubectl
        - containerd.io
        - ipvsadm
        - ipset
        - iproute-tc
# 5. Containerd配置
    - shell: containerd config default > /etc/containerd/config.toml
    - copy:
        src: /etc/containerd/config.toml
        dest: /etc/containerd/config.toml
    - service:
        name: kubelet
        state: started
        enabled: yes 
# 6. 内核配置
    - copy:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
      loop:
        - { src: '/etc/modules-load.d/containerd.conf', dest: '/etc/modules-load.d/containerd.conf'}
        - { src: '/etc/sysctl.d/99-kubernetes-cri.conf', dest: '/etc/sysctl.d/99-kubernetes-cri.conf'}
# 7. 服务管理
    - service:
        name: "{{ item.server }}"
        state: started
        enabled: yes
      loop:
        - { server: 'containerd' }
        - { server: 'systemd-modules-load' }
    - shell: sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf
# 8. 加入集群
    - shell: kubeadm join {{ master }} --token {{ token }} --discovery-token-ca-cert-hash {{ token_hash }}
```

--------------------

#### 扩展内容

##### 命令: tee

```
-a 追加写入操作
-i 忽略中断信号
-p 诊断写入非管道的错误
--help  显示帮助信息
--version 显示版本信息
原文链接:https://www.linuxcool.com/tee
```
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值