二进制部署k8s

一、环境准备

关闭防火墙、selinux、交换分区(swap) 下载阿里云源

1、配置hosts文件

vim /etc/hosts

[root@master1 ~]# cat /etc/hosts
192.168.200.50 master1
192.168.200.51 master2
192.168.200.52 node1

2、配置主机之间无密码登陆

ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub master1
ssh-copy-id -i .ssh/id_rsa.pub master2
ssh-copy-id -i .ssh/id_rsa.pub node1

3、修改内核参数

##加载br_netfilter 模块
modprobe br_netfilter

##验证模块是否加载成功
lsmod |grep br_netfilter

##修改内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

##参数生效
sysctl -p /etc/sysctl.d/k8s.conf

4、下载一些小工具

yum install openssh-clients -y
yum install ntpdate -y
yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet rsync

5、配置时间同步

##跟网络源做同步
ntpdate cn.pool.ntp.org

##把时间同步做成计划任务
crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

###重启 crond 服务
service crond restart

6、开启ipvs

vim ipvs.modules 
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
 /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
 if [ 0 -eq 0 ]; then
 /sbin/modprobe ${kernel_module}
 fi
done

----------------------------------
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

[root@master1 modules]# scp /etc/sysconfig/modules/ipvs.modules master2:/etc/sysconfig/modules/
ipvs.modules  
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

[root@master1 modules]# scp /etc/sysconfig/modules/ipvs.modules node1:/etc/sysconfig/modules/
ipvs.modules                                                                               
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

二、安装docker

##配置源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

##下载
yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io -y

##开启Docker服务
service docker start

##配置加速器
vim /etc/docker/daemon.json 
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://docker.1ms.run"] 
}

systemctl daemon-reload
systemctl restart docker

##kubelet 默认使用 systemd,两者必须一致才可以。

三、搭建etcd集群

1、创建配置文件和证书文件存放目录

##全部机器
mkdir -p /etc/etcd
mkdir -p /etc/etcd/ssl

2、安装签发证书工具 cfssl

mkdir /data/work -p  ##看个人喜欢吧
cd /data/work/

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 

##执行权限
chmod +x *
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

3、配置 ca 证书

##生成 ca 证书请求文件
[root@master1 work]# cat ca-csr.json
{
  "CN": "kubernetes",    #公用名称
  "key": {
      "algo": "rsa", 
      "size": 2048
  },
  "names": [
    {
      "C": "CN",         #只能是国家字母缩写
      "ST": "Guangxi",  #所在省份
      "L": "Nanning",   #所在城市
      "O": "k8s",         #单位名称
      "OU": "system"
    }
  ],
  "ca": {
          "expiry": "87600h"
  }
}

[root@master1 work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
[root@master1 work]# 
##生成 ca 证书文件
[root@master1 work]# cat ca-config.json
{
  "signing": {
      "default": {
          "expiry": "87600h"
        },
      "profiles": {
          "kubernetes": {
              "usages": [
                  "signing",
                  "key encipherment",
                  "server auth",
                  "client auth"
              ],
              "expiry": "87600h"
          }
      }
  }
}

4、生成 etcd 证书

##配置 etcd 证书请求,hosts的ip换自己etcd所在节点的 ip
[root@master1 work]# cat etcd-csr.json
{
  "CN": "etcd",
  "hosts": [
    "127.0.0.1",
    "192.168.200.50",
    "192.168.200.51",
    "192.168.200.199"       ##vip漂移看后续要不要高可用
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [{
    "C": "CN",
    "ST": "Guangxi",
    "L": "Nanning",
    "O": "k8s",
    "OU": "system"
  }]
} 


[root@master1 work]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd

5、部署 etcd 集群

wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz

node节点是不用etcd的,我弄就弄了。

[root@master1 work]# ls
ca-config.json  ca-csr.json  ca.pem    etcd-csr.json  etcd.pem
ca.csr          ca-key.pem   etcd.csr  etcd-key.pem   etcd-v3.4.13-linux-amd64.tar.gz
[root@master1 work]# tar -xf etcd-v3.4.13-linux-amd64.tar.gz 
[root@master1 work]# cp -p etcd-v3.4.13-linux-amd64/etcd* /usr/local/bin/

scp -r etcd-v3.4.13-linux-amd64/etcd* master2:/usr/local/bin/
scp -r etcd-v3.4.13-linux-amd64/etcd* node1:/usr/local/bin/

##创建配置文件
[root@master1 work]# cat etcd.conf
#[Member]
ETCD_NAME="etcd1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.200.50:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.200.50:2379,http://127.0.0.1:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.200.50:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.200.50:2379"
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.200.50:2380,etcd2=https://192.168.200.51:2380,etcd3=https://192.168.200.52:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

##解释
ETCD_NAME:节点名称,集群中唯一
ETCD_DATA_DIR:数据目录
ETCD_LISTEN_PEER_URLS:集群通信监听地址
ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址
ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
ETCD_INITIAL_CLUSTER:集群节点地址
ETCD_INITIAL_CLUSTER_TOKEN:集群 Token
ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new 是新集群,existing 表示加入已有集群

##创建启动服务文件
[root@master1 work]# cat etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
 
[Service]
Type=notify
EnvironmentFile=-/etc/etcd/etcd.conf
WorkingDirectory=/var/lib/etcd/
ExecStart=/usr/local/bin/etcd \
  --cert-file=/etc/etcd/ssl/etcd.pem \
  --key-file=/etc/etcd/ssl/etcd-key.pem \
  --trusted-ca-file=/etc/etcd/ssl/ca.pem \
  --peer-cert-file=/etc/etcd/ssl/etcd.pem \
  --peer-key-file=/etc/etcd/ssl/etcd-key.pem \
  --peer-trusted-ca-file=/etc/etcd/ssl/ca.pem \
  --peer-client-cert-auth \
  --client-cert-auth
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
 
[Install]
WantedBy=multi-user.target

cp ca*.pem /etc/etcd/ssl/
cp etcd*.pem /etc/etcd/ssl/
cp etcd.conf /etc/etcd/
cp etcd.service /usr/lib/systemd/system/

##传给其他主节点机器
for i in master2;do rsync -vaz etcd.conf $i:/etc/etcd/;done
for i in master2;do rsync -vaz etcd*.pem ca*.pem $i:/etc/etcd/ssl/;done
for i in master2;d
### 二进制方式部署 Kubernetes 集群的步骤 Kubernetes 集群的二进制部署通常涉及多个步骤,包括环境准备、配置核心组件(如 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet 和 kube-proxy)以及网络插件等。以下是详细的部署流程: #### 1. 环境准备 在开始部署之前,需要确保所有节点的操作系统环境一致,并安装必要的依赖项。通常,Kubernetes 要求所有节点的 CPU、内存和磁盘资源充足,并配置好静态 IP 地址。此外,需要在所有节点上安装 Docker 或其他容器运行时,以及必要的工具如 `kubectl` 和 `kubeadm` [^1]。 #### 2. 部署 etcd 集群 etcd 是 Kubernetes 的分布式键值存储,用于存储集群的所有数据。部署 etcd 集群时,需要确保每个节点上都安装了 etcd,并配置好集群成员的 IP 地址和端口。可以通过修改 etcd 的配置文件来设置集群成员的地址和端口 [^1]。 #### 3. 容器运行时 Kubernetes 支持多种容器运行时,如 Docker、containerd 和 CRI-O。在部署过程中,需要选择一种容器运行时并在所有节点上安装。例如,Docker 可以通过官方的安装脚本进行安装,并配置好网络和存储驱动 [^1]。 #### 4. 部署 Master 节点 Master 节点负责管理集群的核心组件,包括 kube-apiserver、kube-controller-manager 和 kube-scheduler。这些组件可以通过二进制文件进行安装,并配置好相应的参数。例如,kube-apiserver 需要配置 etcd 的地址、服务端口和认证信息 。 #### 5. 验证 Master 部署部署完 Master 节点后,可以通过 `kubectl` 命令验证集群的状态。例如,使用 `kubectl get nodes` 命令查看节点的状态,确保所有节点都处于 Ready 状态 。 #### 6. 部署 Worker 节点 Worker 节点负责运行容器化的应用程序。在部署 Worker 节点时,需要确保每个节点上都安装了 kubelet 和 kube-proxy,并配置好与 Master 节点的连接信息。例如,kubelet 需要配置 Master 节点的地址和端口 。 #### 7. 加塞一个工作节点 在部署完 Worker 节点后,可以通过 `kubectl` 命令添加更多的工作节点。例如,使用 `kubectl taint` 命令设置节点的污点,确保新节点不会立即接收任务 [^1]。 #### 8. 部署网络插件 Kubernetes 集群需要一个网络插件来管理 Pod 之间的通信。常见的网络插件包括 Flannel、Calico 和 Weave。在部署网络插件时,需要确保插件的配置文件正确,并通过 `kubectl` 命令安装 。 #### 9. 收尾:部署几个仪表盘 在部署完所有核心组件后,可以通过安装 Kubernetes 的仪表盘(如 Kubernetes Dashboard)来管理和监控集群。仪表盘可以通过 `kubectl` 命令安装,并配置好访问权限 。 ### 示例代码 以下是一个生成 kubelet 初次加入集群引导 kubeconfig 文件的示例代码: ```bash KUBE_CONFIG="/opt/kubernetes/cfg/bootstrap.kubeconfig" KUBE_APISERVER="https://192.168.0.10:6443" # apiserver 的 IP 和端口 TOKEN="f522d1cc92c2e703db1fd73165c9f64a2" # 与 master 的 /opt/kubernetes/cfg/token.csv 文件里保持一致 # 生成 kubelet bootstrap kubeconfig 配置文件 kubectl config set-cluster kubernetes \ --certificate-authority=/opt/kubernetes/ssl/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=${KUBE_CONFIG} kubectl config set-credentials "kubelet-bootstrap" \ --token=${TOKEN} \ --kubeconfig=${KUBE_CONFIG} kubectl config set-context default \ --cluster=kubernetes \ --user="kubelet-bootstrap" \ --kubeconfig=${KUBE_CONFIG} kubectl config use-context default --kubeconfig=${KUBE_CONFIG} ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值