用kubeadm搭建kubernetes集群
用 kubeadm 搭建 kubernetes 集群
kubeadm
Kubedm 是一个 K8s 部署工具,提供 kubedm init 和 kebuadm join 用于快速部署 Kubernetes 集群。 Kubernetes集群的部署可以通过两条指令完成:
1.使用kubedm init创建一个Master节点
2.使用kubeadm join<master Node IP and port>将Node加入当前集群
终极目标
1.在所有节点上安装Docker、kubedm、kubelet和kubectl
- 部署 Kubernetes Master
3、部署容器网络插件
- 部署Kubernetes Node并将节点加入Kubernetes集群
5、部署Dashboard Web页面,可视化查看Kubernetes资源
环境准备
角色
知识产权
k8s-master
192.168.1.16
k8s-node1
192.168.1.30
作为居民
192.168.1.31
安装
系统初始化
关闭防火墙
systemctl 停止防火墙
systemctl 禁用防火墙
关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0
关闭交换
# 暂时关闭
交换-a
永久关闭,下次生效
sed -ri 's/.*swap.*/#&/' /etc/fstab
主机名
hostnamectl 设置主机名 <主机名>
在master中添加主机
猫 >> /etc/hosts << EOF
192.168.1.16 k8s-master
192.168.1.30 k8s-node1
192.168.1.31 饰演 Kassendi
EOF
将桥接的 IPv4 流量传递到 iptables 的链
猫 > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables u003d 1
net.bridge.bridge-nf-call-iptables u003d 1
EOF
生效
sysctl --系统
时间同步
百胜安装 ntpdate -y
ntpdate time.windows.com
在所有节点上安装docker/kubedm/kubelet/kubectl
安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y 安装 docker-ce-18.06.1.ce-3.e17
systemctl 启用 docker && systemctl 启动 docker
码头工人--版本
添加阿里云YUM软件源
设置仓库地址
猫 > /etc/docker/daemon.json << EOF
{
“注册表-镜像”:[“https://b9pmyelo.mirror.aliyuncs.com”]
}
EOF
更新/etc/yum.com repos。 d/kubernetes。回购添加百胜源
[kubernetes]
名称u003dKubernetes
baseurlu003dhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
启用u003d1
gpgchecku003d0
回购_gpgchecku003d0
gpgkeyu003dhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
安装kubedm、kubelet、kubectl
yum install -y kubelet kubdum kubectl
systemctl 启用 kubelet
部署 Kubernetes Master
kubeadm 初始化 \
--apiserver-advertise-addressu003d192.168.1.16 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1 \
--service-cidru003d10.96.0.0/12 \
--pod-network-cidru003d10.244.0.0/16
参数说明:
--kubernetes-version v1.23.1 指定版本
– apiserver 通告地址是指通告给其他组件的 IP。一般应该是主节点的IP地址
– service CIDR 指定服务网络,不能与节点网络冲突
– pod network CIDR 指定pod网络,不能与node网络和服务网络冲突
--image-repository registry.aliyuncs.com/google_containers 指定镜像源,因为默认镜像地址是k8s gcr。 IO在中国无法访问。这里指定阿里云镜像仓库的地址。
如果k8s版本比较新,阿里云可能没有对应的镜像,需要从其他地方获取镜像。

配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看节点信息
kubectl 获取节点

配置法兰绒
创建个人资料:
vim kube-flannel.yml
---
api版本:策略/v1beta1
种类:PodSecurityPolicy
元数据:
名称:psp.flannel.unprivileged
注释:
seccomp.security.alpha.kubernetes.io/allowedProfileNames:docker/default
seccomp.security.alpha.kubernetes.io/defaultProfileName:docker/default
apparmor.security.beta.kubernetes.io/allowedProfileNames:运行时/默认
apparmor.security.beta.kubernetes.io/defaultProfileName:运行时/默认
规格:
特权:假
卷:
- 配置映射
- 秘密
- 空目录
- 主机路径
允许的主机路径:
- 路径前缀:“/etc/cni/net.d”
- 路径前缀:“/etc/kube-flannel”
- pathPrefix: "/run/flannel"
只读根文件系统:假
用户和组
运行用户:
规则:RunAsAny
补充组:
规则:RunAsAny
fs组:
规则:RunAsAny
权限提升
allowPrivilegeEscalation:假
defaultAllowPrivilegeEscalation: false
能力
allowedCapabilities:['NET_ADMIN','NET_RAW']
默认添加能力:[]
requiredDropCapabilities: []
主机命名空间
主机PID:假
主机IPC:假
主机网络:真
主机端口:
- 分钟:0
最大值:65535
#SELinux
seLinux:
SELinux 在 CaaSP 中未使用
规则:'RunAsAny'
种类:ClusterRole
api版本:rbac.authorization.k8s.io/v1
元数据:
名称:法兰绒
规则:
- apiGroups: ['extensions']
资源:['podsecuritypolicies']
动词:['使用']
资源名称:['psp.flannel.unprivileged']
- api组:
- “”
资源:
- 豆荚
动词:
- 得到
- api组:
- “”
资源:
- 节点
动词:
- 列表
- 观看
- api组:
- “”
资源:
- 节点/状态
动词:
- 补丁
种类:ClusterRoleBinding
api版本:rbac.authorization.k8s.io/v1
元数据:
名称:法兰绒
角色参考:
apiGroup:rbac.authorization.k8s.io
种类:ClusterRole
名称:法兰绒
科目:
- 种类:ServiceAccount
名称:法兰绒
命名空间:kube 系统
api版本:v1
种类:ServiceAccount
元数据:
名称:法兰绒
命名空间:kube 系统
种类:ConfigMap
api版本:v1
元数据:
名称:kube-flannel-cfg
命名空间:kube 系统
标签:
层:节点
应用:法兰绒
数据:
cni-conf.json:|
{
“名称”:“cbr0”,
"cniVersion": "0.3.1",
“插件”:\ [
{
“类型”:“法兰绒”,
“代表”:{
“发夹模式”:真,
“isDefaultGateway”:真
}
},
{
“类型”:“端口图”,
“能力”:{
“端口映射”:真
}
}
]
}
net-conf.json: |
{
“网络”:“10.245.0.0/16”,
“后台”:{
“类型”:“vxlan”
}
}
api版本:应用程序/v1
种类:DaemonSet
元数据:
名称:kube-flannel-ds
命名空间:kube 系统
标签:
层:节点
应用:法兰绒
规格:
选择器:
匹配标签:
应用:法兰绒
模板:
元数据:
标签:
层:节点
应用:法兰绒
规格:
亲和力:
节点亲和性:
requiredDuringSchedulingIgnoredDuringExecution:
节点选择器条款:
- 匹配表达式:
- 键:kubernetes.io/os
运算符:在
价值观:
- linux
主机网络:真
priorityClassName:系统节点关键
耐受性:
- 运算符:存在
效果:NoSchedule
serviceAccountName:法兰绒
初始化容器:
- 名称:安装-cni
图片:quay.io/coreos/flannel:v0.14.0
命令:
- cp
参数:
- -f
- /etc/kube-flannel/cni-conf.json
- /etc/cni/net.d/10-flannel.conflist
体积安装:
- 名称:cni
挂载路径:/etc/cni/net.d
- 名称:法兰绒-cfg
挂载路径:/etc/kube-flannel/
容器:
- 名称:kube-flannel
图片:quay.io/coreos/flannel:v0.14.0
命令:
- /opt/bin/flanneld
参数:
- --ip 表
- --be-subnet-mgr
资源:
要求:
中央处理器:“100 米”
内存:“50Mi”
限制:
中央处理器:“100 米”
内存:“50Mi”
安全上下文:
特权:假
能力:
添加:[“NET_ADMIN”、“NET_RAW”]
环境:
- 名称:POD_NAME
值来自:
字段参考:
fieldPath: metadata.name
- 名称:POD_NAMESPACE
值来自:
字段参考:
字段路径:元数据.命名空间
体积安装:
- 名称:运行
挂载路径:/run/flannel
- 名称:法兰绒-cfg
挂载路径:/etc/kube-flannel/
卷:
- 名称:运行
主机路径:
路径:/运行/法兰绒
- 名称:cni
主机路径:
路径:/etc/cni/net.d
- 名称:法兰绒-cfg
配置图:
名称:kube-flannel-cfg
执行yaml文件:
kubectl 应用 -f kube-flannel.yml
查看 flannel 部署结果:
kubectl -n kube-system 获取 pod -o 宽
! zoz100037](https://programming.vip/images/doc/58c414fad192cae54eb0106ef8691551.jpg)
查看节点状态:
kubectl 获取节点

部署Kubernetes节点
在 192.168.1.30 和 192.168.1.31 上向集群添加新节点,然后执行 kubedm init 的 kubedm join 命令输出:
kubeadm 加入 192.168.1.16:6443 --token smmkaf.f9mft92fmix6dwby \
--discovery-token-ca-cert-hash sha256:5ee2a223c8151b27efb73783b4df000aa23532964f77e86e2d25fb826748da28
测试Kubernetes集群
在 Kubernetes 中创建一个 Pod 并验证它是否正常工作:
kubectl 创建部署 nginx --imageu003dnginx
kubectl 暴露部署 nginx --port 80 --type NodePort
kubectl 获取 pod、svc
访问地址:http://NodeIP:Port
安装过程中出现的问题
升级系统内核
CentOS 7. 3.10.x 内置系统 X内核存在一些Bug,导致运行的Docker和Kubernetes不稳定。
CentOS 允许使用 ELRepo,这是一个可以将内核升级到最新版本的第三方存储库。
要在 CentOS 7 上启用 ELRepo 存储库,请运行:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
启用仓库后,您可以使用以下命令列出可用的内核相关包:
yum --disablerepou003d"*" --enablerepou003d"elrepo-kernel" 可用列表

安装最新的主线稳定内核:
yum --enablerepou003delrepo-kernel 安装 kernel-ml

最后重启机器并应用最新的内核,然后运行以下命令查看最新的内核版本:

curl: Peer 报告不兼容或不支持的协议版本
查找curl和NSS版本低的原因。解决方案是更新 NSS 和 curl。
yum 更新 nss 卷曲

初始化Kubernetes问题(配置文件已经存在)
kubeadm 重置


运行 Kubelet 失败:配置错误:kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd")
初始化失败,说明kubelet健康状态异常。

查看kubelet状态systemctl status kubelet并提示error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "system D" is different from docker cgroup driver: "cgroupfs"。

kubelet 的默认 cgroupdriver 是 cgroupfs,但它实际上推荐 systemd,有趣!
修改/etc/docker/daemon JSON中的docker,添加“exec opts”:[“native.cgroupdriveru003dsystemd”]
{
"注册表-镜像":["https://docker.mirrors.ustc.edu.cn"],
“exec-opts”:[“native.cgroupdriveru003dsystemd”]
}
修改立方体:
猫 > /var/lib/kubelet/config.yaml <<EOF
api版本:kubelet.config.k8s.io/v1beta1
种类:KubeletConfiguration
cgroupDriver:系统
EOF
重启 docker 和 kubelet:
systemctl 守护程序重新加载
systemctl 重新启动泊坞窗
systemctl 重启 kubelet
检查 docker info|grep "Cgroup Driver" 是否输出 Cgroup Driver: systemd:

更多推荐
所有评论(0)