K8S基础环境部署0

基础环境部署

1)前期准备(所有节点)

1、修改主机名和配置 hosts

先部署 1master 和 2node 节点,后面再加一个 master 节点

# 在172.17.35.60执行
hostnamectl set-hostname  k8s-m60
# 在172.17.35.62执行
hostnamectl set-hostname k8s-n62
# 在172.17.35.63执行
hostnamectl set-hostname k8s-n63

配置 hosts

cat >> /etc/hosts<<EOF

172.17.35.60 k8s-m60 cluster-endpoint
172.17.35.62 k8s-n62
172.17.35.63 k8s-n63

EOF

2、配置 ssh 互信(不必须)

# 直接一直回车就行
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-m60
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-n62
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-n63

3、时间同步

yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources

4、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

5、关闭 swap

# 临时关闭;关闭swap主要是为了性能考虑
swapoff -a
# 可以通过这个命令查看swap是否关闭了
free
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab

6、禁用 SELinux

# 临时关闭
setenforce 0
# 永久禁用
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

7、允许 iptables 检查桥接流量(可选,所有节点)

若要显式加载此模块,请运行 sudo modprobe br_netfilter,通过运行 lsmod | grep br_netfilter 来验证 br_netfilter 模块是否已加载,

sudo modprobe br_netfilter
lsmod | grep br_netfilter

为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 设置为 1。例如:

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system

2)安装容器 docker(所有节点)

提示:v1.24 之前的 Kubernetes 版本包括与 Docker Engine 的直接集成,使用名为 dockershim 的组件。这种特殊的直接整合不再是 Kubernetes 的一部分 (这次删除被作为 v1.20 发行版本的一部分宣布)。你可以阅读检查 Dockershim 弃用是否会影响你 以了解此删除可能会如何影响你。要了解如何使用 dockershim 进行迁移,请参阅从 dockershim 迁移。
# 配置yum源
cd /etc/yum.repos.d ; mkdir bak; mv CentOS-Linux-* bak/
# centos7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# centos8
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
# 安装yum-config-manager配置工具
yum -y install yum-utils
# 设置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker-ce版本
yum install -y docker-ce
# 启动
systemctl start docker
# 开机自启
systemctl enable docker
# 查看版本号
docker --version
# 查看版本具体信息
docker version
# Docker镜像源设置
# 修改文件 /etc/docker/daemon.json,没有这个文件就创建
# 添加以下内容后,重启docker服务:
cat >/etc/docker/daemon.json<<EOF
{
   "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
# 加载
systemctl reload docker
# 查看
systemctl status docker containerd
【温馨提示】dockerd 实际真实调用的还是 containerd 的 api 接口,containerd 是 dockerd 和 runC 之间的一个中间交流组件。所以启动 docker 服务的时候,也会启动 containerd 服务的。

3)配置 k8s yum 源(所有节点)

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[k8s]
name=k8s
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
EOF

4)将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)

# 导出默认配置,config.toml这个文件默认是不存在的
containerd config default > /etc/containerd/config.toml
grep sandbox_image  /etc/containerd/config.toml
sed -i "s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g"       /etc/containerd/config.toml
grep sandbox_image  /etc/containerd/config.toml

5)配置 containerd cgroup 驱动程序 systemd(所有节点)

kubernets 自v 1.24.0 后,就不再使用 docker.shim,替换采用 containerd 作为容器运行时端点。因此需要安装 containerd(在 docker 的基础下安装),上面安装 docker 的时候就自动安装了 containerd 了。这里的 docker 只是作为客户端而已。容器引擎还是 containerd。
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
# 应用所有更改后,重新启动containerd
systemctl restart containerd

6)开始安装 kubeadm,kubelet 和 kubectl(master 节点)

# 不指定版本就是最新版本,当前最新版就是1.24.1
yum install -y kubelet-1.24.1  kubeadm-1.24.1  kubectl-1.24.1 --disableexcludes=kubernetes
# disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
systemctl enable --now kubelet

# 查看状态,这里需要等待一段时间再查看服务状态,启动会有点慢
systemctl status kubelet

查看日志,发现有报错,报错如下:

kubelet.service: Main process exited, code=exited, status=1/FAILURE kubelet.service: Failed with result 'exit-code'.
【解释】重新安装(或第一次安装)k8s,未经过 kubeadm init 或者 kubeadm join 后,kubelet 会不断重启,这个是正常现象……,执行 init 或 join 后问题会自动解决,对此官网有如下描述,也就是此时不用理会 kubelet.service。

查看版本

kubectl version
yum info kubeadm

7)最好提前把镜像下载好,这样安装快

ctr -n=k8s.io images pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.24.1
ctr -n=k8s.io images pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.24.1
ctr -n=k8s.io images pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.24.1
ctr -n=k8s.io images pull registry.aliyuncs.com/google_containers/kube-proxy:v1.24.1
ctr -n=k8s.io images pull registry.aliyuncs.com/google_containers/pause:3.7
ctr -n=k8s.io images pull registry.aliyuncs.com/google_containers/etcd:3.5.3-0
ctr -n=k8s.io images pull registry.aliyuncs.com/google_containers/coredns:v1.8.6

posted @ 2023-04-07 09:41  qq366830352  阅读(43)  评论(0编辑  收藏  举报