Kubernets部署文档-学习环境

294 阅读3分钟

一键安装文档 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设备

  • 各主机时间同步

需要开放的节点端口

image.png

机器要求

image.png

阿里云准备3台2c4g 系统盘40G的虚机 操作系统ubuntu20.04版本

image.png

推荐 3 * master节点 和 3 * node节点

image.png

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

image.png

查看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

www.cnblogs.com/jiumo/p/159…

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集群时需要明确指定的版本号。

参考文档 kubernetes.io/docs/setup/…

整合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下来

image.png

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,并生成节点加入命令。

image.png

初始化完成后的操作步骤

step1 第1个步骤提示, Kubernetes集群管理员认证到Kubernetes集群时使用的kubeconfig配置文件(只在主节点操作)

image.png

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

下载地址 github.com/flannel-io/…

image.png

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

image.png

step4 除了主节点之外的其余节点 加入集群

image.png

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的输出 image.png

部署完成

image.png

常用命令

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

资源类型的结构