一键安装文档 juejin.cn/post/707068…
参考文档 mp.weixin.qq.com/s/ySnENeuII…
部署前提
-
使用kubeadm部署Kubernetes集群的前提条件
-
支持Kubernetes运行的Linux主机,例如Debian、RedHat及其变体等
-
每主机2GB以上的内存,以及2颗以上的CPU
-
各主机间能够通过网络无障碍通信
-
独占的hostname、MAC地址以及product_uuid,主机名能够正常解析
-
放行由Kubernetes使用到的各端口,或直接禁用iptables
-
禁用各主机的上的Swap设备
-
各主机时间同步
需要开放的节点端口
机器要求
阿里云准备3台2c4g 系统盘40G的虚机 操作系统ubuntu20.04版本
推荐 3 * master节点 和 3 * node节点
master02 master03节点可以先不用搭建
部署思路
- step1 前置准备
- step2 安装容器运行时
- docker-ce docker-cri
- 或者 containerd
- step3 安装kubelet kubectl kubeadm
- step4 创建集群
- 第一个节点执行kubeadm init 拉起控制平面节点
- 将其他的控制平面节点 使用kubeadm join加入到集群中
- 将worker节点加入集群
部署步骤
配置操作系统
时钟配置
apt-get install chrony
chronyc sources
查看swap设备
systemctl --type swap
安装docker
step1 每台机器 配置主机名
# 每台机器配置主机名
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-master02
hostnamectl set-hostname k8s-master03
# 每台机器配置 vim /etc/hosts
172.30.66.169 kubeapi.magedu.com kubeapi
172.30.66.169 k8s-master01.magedu.com k8s-master01
172.30.66.170 k8s-master02.magedu.com k8s-master02
172.30.66.171 k8s-master03.magedu.com k8s-master03
kubeapi.magedu.com 专用apiserver的 后面高可用的时候也会用到
step2 每台机器 安装并启动docker
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt -y install docker-ce
step3配置国内 镜像加速 vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "200m"
},
"storage-driver": "overlay2"
}
step4
systemctl daemon-reload
systemctl start docker.service
systemctl enable docker.service
systemctl status docker.service
安装cri-dockerd
官方下载
curl -LO https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.0/cri-dockerd_0.3.0.3-0.ubuntu-focal_amd64.deb
apt install -y ./cri-dockerd_0.3.0.3-0.ubuntu-focal_amd64.deb
# 完成安装后,相应的服务cri-dockerd.service便会自动启动。我们也可以使用如下命令进行验证,若服务处于Running状态即可进行后续步骤 。
systemctl status cri-docker.service
安装kubelet、kubeadm和kubectl
配置使用 阿里云源
apt update && apt install -y apt-transport-https curl
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt update
apt install -y kubelet kubeadm kubectl
systemctl enable kubelet
systemctl status kubelet
# 安装完成后,要确保kubeadm等程序文件的版本,这将也是后面初始化Kubernetes集群时需要明确指定的版本号。
整合kubelet和cri-dockerd 让kubelet可以和docker-ce交互
step1 配置cri-dockerd
# 配置cri-dockerd,确保其能够正确加载到CNI插件。编辑/usr/lib/systemd/system/cri-docker.service文件,确保其[Service]配置段中的ExecStart的值类似如下内容。
vim /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.d
# 需要添加的各配置参数(各参数的值要与系统部署的CNI插件的实际路径相对应:
# --network-plugin:指定网络插件规范的类型,这里要使用CNI;
# --cni-bin-dir:指定CNI插件二进制程序文件的搜索目录;
# --cni-cache-dir:CNI插件使用的缓存目录;
# --cni-conf-dir:CNI插件加载配置文件的目录;
# 配置完成后,重载并重启cri-docker.service服务。
systemctl daemon-reload && systemctl restart cri-docker.service && systemctl status cri-docker.service
step2 配置kubelet
参考 developer.aliyun.com/mirror/kube…
# 配置kubelet,为其指定cri-dockerd在本地打开的Unix Sock文件的路径,该路径一般默认为“/run/cri-dockerd.sock“。编辑文件/etc/sysconfig/kubelet,为其添加 如下指定参数。
# 提示:若/etc/sysconfig目录不存在,则需要先创建该目录。
mkdir /etc/sysconfig
cat <<EOF >/etc/sysconfig/kubelet
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/run/cri-dockerd.sock"
EOF
# 需要说明的是,该配置也可不进行,而是直接在后面的各kubeadm命令上使用“--cri-socket unix:///run/cri-dockerd.sock”选项。
初始化操作
step1 下载镜像(所有节点节点操作)
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
kubeadm config images pull --cri-socket unix:///run/cri-dockerd.sock --image-repository registry.aliyuncs.com/google_containers
docker pull registry.aliyuncs.com/google_containers/pause:3.6
docker tag registry.aliyuncs.com/google_containers/pause:3.6 registry.k8s.io/pause:3.6
docker image ls
提示: kube init的时候会去找pause:3.6的镜像 因为没有科学上网 所以需要提前docker pull下来
step2 初始化配置(只在主节点操作)
kubeadm init --control-plane-endpoint="kubeapi.magedu.com" --kubernetes-version=v1.26.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock --upload-certs --image-repository registry.aliyuncs.com/google_containers
注意 也可以通过yml文件的方式去部署 --token-ttl=0 生产环境不建议
命令中的各选项简单说明如下:
- --image-repository:指定要使用的镜像仓库,默认为registry.k8s.io;
- --kubernetes-version:kubernetes程序组件的版本号,它必须要与安装的kubelet程序包的版本号相同;
- --control-plane-endpoint:控制平面的固定访问端点,可以是IP地址或DNS名称,会被用于集群管理员及集群组件的kubeconfig配置文件的API Server的访问地址;单控制平面部署时可以不使用该选项;
- --pod-network-cidr:Pod网络的地址范围,其值为CIDR格式的网络地址,通常,Flannel网络插件的默认为10.244.0.0/16,Project Calico插件的默认值为192.168.0.0/16;
- --service-cidr:Service的网络地址范围,其值为CIDR格式的网络地址,默认为10.96.0.0/12;通常,仅Flannel一类的网络插件需要手动指定该地址;
- --apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址;
- --token-ttl:共享令牌(token)的过期时长,默认为24小时,0表示永不过期;为防止不安全存储等原因导致的令牌泄露危及集群安全,建议为其设定过期时长。未设定该选项时,在token过期后,若期望再向集群中加入其它节点,可以使用如下命令重新创建token,并生成节点加入命令。
初始化完成后的操作步骤
step1 第1个步骤提示, Kubernetes集群管理员认证到Kubernetes集群时使用的kubeconfig配置文件(只在主节点操作)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
step2 每个节点操作 第2个步骤提示 为Kubernetes集群部署一个网络插件,具体选用的插件则取决于管理员;(所有节点都操作)
mkdir /opt/bin/
# 下载flanneld
wget https://github.com/flannel-io/flannel/releases/download/v0.20.2/flanneld-amd64 -o /opt/bin/flanneld
chmod +x /opt/bin/flanneld
step3 部署kube-flannel(只在主节点操作)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml
或者
https://www.cnblogs.com/iXiAo9/p/15007558.html
step4 除了主节点之外的其余节点 加入集群
kubeadm join kubeapi.magedu.com:6443 --token xrou8g.60pa9634l9hvpoz4 \
--discovery-token-ca-cert-hash sha256:130cc808bbda1ede5eadda09bf33bb563ca70d6acad861ddcd8c6bdbe9abf64c --cri-socket unix:///run/cri-dockerd.sock
提示 参考join的命令在kubeadm init的输出
部署完成
常用命令
kubectl get nodes # 查看所有nodes
kubectl describe node k8s-master01 # 查看某个node的信息
kubectl get pods -n kube-system #查看pods
kubectl api-versions 查看API版本 展示群组
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl api-versions
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
batch/v1
certificates.k8s.io/v1
coordination.k8s.io/v1
discovery.k8s.io/v1
events.k8s.io/v1
flowcontrol.apiserver.k8s.io/v1beta2
flowcontrol.apiserver.k8s.io/v1beta3
networking.k8s.io/v1
node.k8s.io/v1
policy/v1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
API资源类型
- 组名/版本级别
-
stable 稳定版本
-
beta 公测
-
alpha 内测
-
kubectl api-resources --api-group=apps 获取组内的资源类型
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl api-resources --api-group=apps
NAME SHORTNAMES APIVERSION NAMESPACED KIND
controllerrevisions apps/v1 true ControllerRevision
daemonsets ds apps/v1 true DaemonSet
deployments deploy apps/v1 true Deployment
replicasets rs apps/v1 true ReplicaSet
statefulsets sts apps/v1 true StatefulSet
资源类型的结构