安装 containerd
# Debian 系统
$ sudo apt installcontainerd.io
#rhel 部分
$ sudo yum installcontainerd.io
#配置 containerd
创建新的/etc/systemd/system/cri-containerd.service 文件
[单元]
描述=kubernetes 的containerd 容器运行时
文档=https://containerd.io
After=network.target local-fs.target
[服务]
ExecStartPre=-/sbin/modprobe 覆盖
ExecStart=/usr/bin/containerd –config //etc/cri-containerd/config.toml
类型=通知
代理=是
KillMode=进程
重新启动=始终
重启秒=5
# 使用非零限制*会因会计开销而导致性能问题
# 我们建议在内核中使用cgroup 进行容器本地记帐。
极限NPROC=无穷大
极限CORE=无穷大
LimitNOFILE=无穷大
# 如果您的systemd 版本不支持,请注释TasksMax。
# 仅systemd 226及以上版本支持此版本。
任务最大值=无穷大
OOMScoreAdjust=-999
[安装]
WantedBy=多用户.Target
创建新的/etc/cri-containerd/config.tomlcontainerd 配置文件
版本=2
# 持久化数据位置
root=\’/var/lib/cri-containerd\’
# 运行时状态信息
状态=\’/run/cri-containerd\’
插件目录=\’\’
无效插件=[]
必需的插件=[]
#设置containerd的OOM分数
oom_score=0
[玻璃钢]
地址=\’/run/cri-containerd/cri-containerd.sock\’
tcp_地址=\’\’
tcp_tls_cert=\’\’
tcp_tls_key=\’\’
# 套接字UID
uid=0
# 套接字gid
组号=0
最大接收消息大小=16777216
最大发送消息大小=16777216
[调试]
地址=\’\’
格式=\’json\’
uid=0
组号=0
级别=\’\’
[指标]
地址=\’127.0.0.1:1338\’
grpc_histogram=false
[c组]
路径=\’\’
[暂停]
\’io.containerd.timeout.shim.cleanup\’=\’5s\’
\’io.containerd.timeout.shim.load\’=\’5s\’
\’io.containerd.timeout.shim.shutdown\’=\’3s\’
\’io.containerd.timeout.task.state\’=\’2s\’
[插入]
[插件.\’io.containerd.gc.v1.scheduler\’]
暂停阈值=0.02
删除阈值=0
突变阈值=100
计划延迟=\’0s\’
启动延迟=\’100ms\’
[插件.\’io.containerd.grpc.v1.cri\’]
禁用tcp 服务=true
流服务器地址=\’127.0.0.1\’
流服务器端口=\’0\’
Stream_idle_timeout=\’4小时0分0秒\’
启用_selinux=false
selinux_category_range=1024
sandbox_image=\’registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5\’
统计收集周期=10
# systemd_cgroup=false
启用_tls_streaming=false
最大容器日志行大小=16384
禁用_cgroup=false
禁用_apparmor=false
strict_oom_score_adj=false
最大并发下载数=3
禁用进程挂载=false
取消设置_seccomp_profile=\’\’
allow_missing_hugetlb_controller=true
禁用_hugetlb_controller=true
要忽略的图像定义体积=false
[插件.\’io.containerd.grpc.v1.cri\’.containerd]
快照器=\’overlayfs\’
默认运行时名称=\’runc\’
无枢轴=false
disable_snapshot_annotations=false
Discard_unpacked_layers=false
[插件.\’io.containerd.grpc.v1.cri\’.containerd.runtimes]
[插件.\’io.containerd.grpc.v1.cri\’.containerd.runtimes.runc]
运行时类型=\’io.containerd.runc.v2\’
pod_annotations=[]
容器注释=[]
非特权主机设备=false
基本运行时规范=\’\’
[插件.\’io.containerd.grpc.v1.cri\’.containerd.runtimes.runc.options]
# SystemdCgroup 启用systemd cgroup。
SystemdCgroup=true
# BinaryName 是runc 二进制文件的二进制名称。
# 二进制名称=\’runc\’
# 二进制名称=\’crun\’
# NoPivotRoot 在创建容器时禁用枢轴根。
#NoPivotRoot=false
# NoNewKeyring 禁用容器的新密钥环。
#NoNewKeyring=false
# ShimCgroup 将shim 放置在cgroup 中。
# ShimCgroup=\’\’
# IoUid 设置I/O 管道uid。
#IoUid=0
# IoGid 设置I/O 管道GID。
#IoGid=0
# root 是runc 根目录。
根=\’\’
# CriuPath 是criu 二进制路径。
#criupas=\’\’
# CriuImagePath 是criu 图像的路径
#CriuImagePath=\’\’
# CriuWorkPath 是criu 工作路径。
# CriuWorkPath=\’\’
[插件.\’io.containerd.grpc.v1.cri\’.cni]
bin_dir=\’/opt/cni/bin\’
conf_dir=\’/etc/cni/net.d\’
最大会议数=1
conf_template=\’\’
[插件.\’io.containerd.grpc.v1.cri\’.registry]
config_path=\’/etc/cri-containerd/certs.d\’
[插件.\’io.containerd.grpc.v1.cri\’.registry.headers]
# Foo=[\’酒吧\’]
[插件.\’io.containerd.grpc.v1.cri\’.image_decryption]
关键型号=\’\’
[插件.\’io.containerd.grpc.v1.cri\’.x509_key_pair_streaming]
tls_cert_file=\’\’
tls_key_file=\’\’
[插件.\’io.containerd.internal.v1.opt\’]
路径=\’/opt/cri-containerd\’
[插件.\’io.containerd.internal.v1.restart\’]
间隔=\’10 秒\’
[插件.\’io.containerd.metadata.v1.bolt\’]
content_sharing_policy=\’共享\’
[插件.\’io.containerd.monitor.v1.cgroups\’]
no_prometheus=false
[插件.\’io.containerd.runtime.v2.task\’]
平台=[\’linux/amd64\’]
[插件.\’io.containerd.service.v1.diff-service\’]
默认=[\’行走\’]
[插件.\’io.containerd.snapshotter.v1.devmapper\’]
根路径=\’\’
池名称=\’\’
基本图像大小=\’\’
异步删除=假
#安装kubeletkubeadmkubectlcri-toolskubernetes-cni
#Ubuntu/Debian
$ apt-get update apt-get install -y apt-transport-https
$curlhttps://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | 添加apt 密钥-
$ cat EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/kubernetes-xenial main
结束后
$ apt-get 更新
$ apt-get install -y kubelet kubeadm kubectl
#CentOS/Fedora
$ cat EOF /etc/yum.repos.d/kubernetes.repo
[库伯内特]
名称=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
有效=1
gpg检查=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
结束后
$ sudo yum install -y kubelet kubeadm kubectl
#修改内核的运行参数
$ cat EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables=1
结束后
# 应用设置
$ sysctl –系统
#配置 kubelet
#修改kubelet.service
/etc/systemd/system/kubelet.service.d/10-proxy-ipvs.conf写入以下内容
# 启用ipvs相关内核模块
[服务]
ExecStartPre=-/sbin/modprobe ip_vs
ExecStartPre=-/sbin/modprobe ip_vs_rr
ExecStartPre=-/sbin/modprobe ip_vs_wrr
ExecStartPre=-/sbin/modprobe ip_vs_sh
通过运行以下命令应用配置:
$ sudo systemctl 守护进程重新加载
#部署
#master
$ systemctl 启用cri-containerd
$ systemctl 启动cri-containerd
$ sudo kubeadm init \\
–image-repositoryregistry.cn-hangzhou.aliyuncs.com/google_containers \\
–pod-network-cidr 10.244.0.0/16 \\
–cri-socket /run/cri-containerd/cri-containerd.sock \\
–v5\\
–ignore-preflight-errors=全部
–pod-network-cidr 10.244.0.0/16 参数与后续的CNI 插件相关。这里我们以法兰绒为例。如果您稍后部署其他类型的网络插件,请更改此参数。
执行过程中可能会出现错误,比如缺少依赖包等。按照提示进行安装。
如果执行成功就会输出
.
[附加组件] 必需附加组件: CoreDNS
I1116 12:35:13.270407 86677 request.go:538]节流请求花费了181.409184毫秒,request: POST:https://192.168.199.100:6443/api/v1/namespaces/服务帐户
I1116 12:35:13.470292 86677 request.go:538]节流请求花费了186.088112毫秒,request: POST:https://192.168.199.100:6443/api/v1/namespaces/配置图
[插件] 必需插件: kube-proxy
Kubernetes 控制平面已成功初始化。
要开始使用集群,您需要以普通用户: 身份运行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
现在您需要将Pod 网络部署到集群。
使用: 中列出的选项之一运行“kubectl apply -f [podnetwork].yaml”。
https://kubernetes.io/docs/concepts/cluster-administration/addons/
然后,您可以通过以root: 在每个工作节点上运行以下命令来加入任意数量的工作节点:
kubeadm 加入192.168.199.100:6443 –token cz81zt.orsy9gm9v649e5lf \\
–discovery-token-ca-cert-hash sha256:5edb316fd0d8ea2792cba15cdf1c899a366f147aa03cba52d4e5c5884ad836fe
#node 工作节点
在另一台主机上重复部署部分中的前面步骤来安装和配置kubelet。按照提示加入集群。
$ systemctl 启用cri-containerd
$ systemctl 启动cri-containerd
$ kubeadm 加入192.168.199.100:6443 \\
–token cz81zt.orsy9gm9v649e5lf \\
–discovery-token-ca-cert-hash sha256:5edb316fd0d8ea2792cba15cdf1c899a366f147aa03cba52d4e5c5884ad836fe \\
–cri-socket /run/cri-containerd/cri-containerd.sock
#查看服务
所有服务启动后,使用crictl查看本地实际运行的容器。这些服务大致分为三类:主节点服务、工作节点服务和其他服务。
CONTAINER_RUNTIME_ENDPOINT=/run/cri-containerd/cri-containerd.sock crictl ps -a
#主节点服务
apiserver 是一个系统范围的外部接口,提供RESTful 方法供客户端和其他组件调用。
调度器负责调度资源并将特定的Pod 分配给特定的节点。
控制器管理器负责管理控制器,包括端点控制器(更新与服务和Pod 相关的信息)和复制控制器(以配置的值维护特定Pod 的复制)。
#工作节点服务
代理提供对Pod 上服务的访问。
#其它服务
etcd 是一个全状态存储数据库。
#使用
将/etc/kubernetes/admin.conf 复制到~/.kube/config
运行$ kubectl get all -A 查看已启动的服务。
CoreDNS 未正确启动,因为未部署CNI 插件。有关使用Kubernetes 的信息,请参阅以下章节:
#部署 CNI
我们以法兰绒为例。
#flannel
检查podCIDR 设置
$ kubectl 获取节点-o yaml CIDR |
输出
Pod CIDR: 10.244.0.0/16
Pod CIDR:
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Documentation/kube-flannel.yml
#master 节点默认不能运行 pod
使用kubeadm 部署单节点集群时默认不可用。运行以下命令以取消限制。
$ kubectl 污点节点–all node-role.kubernetes.io/master-
# 恢复默认值
# $ kubectl 污点节点NODE_NAME node-role.kubernetes.io/master=true:NoSchedule
以上使用#kubeadm部署kubernetes的相关内容来源网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93979.html