Kubernetes之路(1)-安装搭建篇
前言此文档用于安装kubernetes,当前使用虚拟机进行模拟生产环境。一、安装环境** 主机信息 **kube-master192.168.10.130kube-slave01 192.168.10.128kube-slave02 192.168.10.129kube-slave03 192.168.10.131** 服务器配置 **[root@kube-master]# cat /etc/os
前言
此文档用于安装kubernetes,当前使用虚拟机进行模拟生产环境。
一、安装环境
** 主机信息 **
kube-master 192.168.10.130
kube-slave01 192.168.10.128
kube-slave02 192.168.10.129
kube-slave03 192.168.10.131
** 服务器配置 **
[root@kube-master]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
** k8s 安装环境要求 **
(1).服务器配置最低2c2G
(2).节点之中不可以有重复的主机名、MAC 地址或 product_uuid
(3).禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区
(4).确保br_netfilter模块已加载(默认都已加载)
注意:生产环境必须禁用swap,测试环境任意
二、内核添加优化参数 所有机器
(1).允许iptables查看桥接流量
[root@kube-master ~]# cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
(2).检查br_netfilter模块
[root@kube-master ~]# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@kube-master ~]# sudo sysctl --system
三、安装 runtime 所有机器
默认情况下,Kubernetes 使用 容器运行时接口(Container Runtime Interface,CRI) 来与你所选择的容器运行时交互。
如果你不指定运行时,则 kubeadm 会自动尝试检测到系统上已经安装的运行时, 方法是扫描一组众所周知的 Unix 域套接字。 下面的表格列举了一些容器运行时及其对应的套接字路径:
运行时 域套接字
Docker /var/run/dockershim.sock
containerd /run/containerd/containerd.sock
CRI-O /var/run/crio/crio.sock
如果同时检测到 Docker 和 containerd,则优先选择 Docker。 这是必然的,因为 Docker 18.09 附带了 containerd 并且两者都是可以检测到的, 即使你仅安装了 Docker。 如果检测到其他两个或多个运行时,kubeadm 输出错误信息并退出。
kubelet 通过内置的 dockershim CRI 实现与 Docker 集成。
此处使用docker作为runtime
# step 1: 安装必要的一些系统工具
[root@kube-master ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
[root@kube-master ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
[root@kube-master ~]# sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
[root@kube-master ~]# sudo yum makecache fast
[root@kube-master ~]# sudo yum -y install docker-ce
# Step 4: 开启Docker服务
[root@kube-master ~]# sudo systemctl start docker && systemctl enable docker
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
四、配置docker 所有机器
[root@kube-master ~]# touch /etc/docker/daemon.json
[root@kube-master ~]# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": ["https://wysd3sxi.mirror.aliyuncs.com"],
"live-restore": true
}
注意:“registry-mirrors” 使用的阿里云镜像服务加速地址
五、安装 kubeadm、kubelet 和 kubectl 所有机器安装
你需要在每台机器上安装以下的软件包:
kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通信的命令行工具。
kubeadm 不能 帮你安装或者管理 kubelet 或 kubectl,所以你需要 确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 间的相差一个次要版本不一致是支持的,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。
[root@kube-master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
[root@kube-master ~]# setenforce 0
[root@kube-master ~]# yum install -y kubelet kubeadm kubectl
[root@kube-master ~]# systemctl enable kubelet && systemctl start kubelet
六、初始化集群
初始化集群时,需要注意 使用kubeadm官方推荐使用systemd作为驱动,cgroupfs和systemd的本质上没有什么区别 systemd相当于再次对cgroupfs进行了封装,操作起来要比直接操作cgroupfs简单.
(1.) 查看kubeadm默认初始化配置
[root@kube-master ~]# kubeadm config print init-defaults > config/k8s_init_config.yml
[root@kube-master ~]# cat config/k8s_init_config.yml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 1.2.3.4
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
imagePullPolicy: IfNotPresent
name: node
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: 1.23.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
scheduler: {}
修改:
advertiseAddress 地址为masterIP地址
name 为master节点的名称
imageRepository 修改为阿里云代理地址 registry.aliyuncs.com/google_containers
增加:
podSubnet: 10.224.0.0/16
修改后配置文件
[root@kube-master ~]# cat config/k8s_init_config.yml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.10.130
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
imagePullPolicy: IfNotPresent
name: node
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.23.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.224.0.0/16
scheduler: {}
(2.) 初始化
[root@kube-master ~]# kubeadm init --config config/k8s_init_config.yml
初始化完成后执行一下
[root@kube-master ~]#mkdir -p $HOME/.kube
[root@kube-master ~]#sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@kube-master ~]#sudo chown $(id -u):$(id -g) $HOME/.kube/config
过程比较慢,因为需要下载镜像,如果长时间没反应可能会卡在下载镜像的位置,
(3.) 添加机器,在非master机器上执行
[root@kube-master ~]# kubeadm join 192.168.10.130:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:1df6968153d10d9a1c15acddd7a894714f5a1ae670ece96419fe685f82e7cae4
将所有机器添加到集群内,此时集群已经初始化完成,但是现在集群还是非可用状态,因为没有部署网络插件,例如coredns 当前应该是pedding状态,因为node当前时NoReady状态,且coredns需要调度到非master节点上,不过也可以通过配置污点容忍使其调度到master上.下面将部署网络插件,此处选择calico,当前只是搭建之后会详解
七、安装网络插件calico
(1.)calico安装条件
确保您的 linux 主机满足以下要求:
x86-64、arm64、ppc64le 或 s390x 处理器
2CPU
2GB 内存
10GB 可用磁盘空间
RedHat Enterprise Linux 7.x+、CentOS 7.x+、Ubuntu 16.04+ 或 Debian 9.x+
确保 Calico 可以在主机上进行管理cali和接口。tunl如果主机上存在 NetworkManager,请参阅 配置 NetworkManager。
(2.)安装calico
[root@kube-master ~]# curl https://projectcalico.docs.tigera.io/manifests/calico-etcd.yaml -o calico.yaml
[root@kube-master ~]# kubectl apply -f calico.yaml
(3.)安装calico命令行工具calicoctl
[root@kube-master ~]# curl -L https://github.com/projectcalico/calico/releases/download/v3.22.0/calicoctl-linux-amd64 -o calicoctl
[root@kube-master ~]# chmod +x ./calicoctl
默认会通过kubernetes api连接到k8s自身的etcd集群
(4.) 查看机器状态&网络状态
注意: 此处显示的是RR模式,默认calico是全互联模式,后期会讲解
[root@kube-master ~]# calicoctl node status
Calico process is running.
IPv4 BGP status
+----------------+---------------+-------+------------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+----------------+---------------+-------+------------+-------------+
| 192.168.10.128 | node specific | up | 2022-03-02 | Established |
+----------------+---------------+-------+------------+-------------+
IPv6 BGP status
No IPv6 peers found.
[root@kube-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-slave01 Ready <none> 29h v1.23.4
kube-slave02 Ready <none> 29h v1.23.4
kube-slave03 Ready <none> 30h v1.23.4
node Ready control-plane,master 30h v1.23.4
环境搭建完成
更多推荐
所有评论(0)