flash网站建设公司,企业网站找私人做什,百度付费问答平台,茶楼网站Kubeadm部署K8s
集群规划#xff1a;
Master节点规划: Node节点规划: 安装要求
在开始之前#xff0c;部署Kubernetes集群机器需要满足以下几个条件#xff1a;
操作系统 CentOS7.x-86_x64
硬件配置#xff1a;2GB或更多RAM#xff0c;2个CPU或更多CPU#xff0c;硬盘…Kubeadm部署K8s
集群规划
Master节点规划: Node节点规划: 安装要求
在开始之前部署Kubernetes集群机器需要满足以下几个条件
操作系统 CentOS7.x-86_x64
硬件配置2GB或更多RAM2个CPU或更多CPU硬盘30GB或更多
集群中所有机器之间网络互通
可以访问外网需要拉取镜像
禁止swap分区此实验机器规划如下:
k8s-master 42.51.227.113 Centos 7.x-X86_64
k8s-node1 42.51.227.114 Centos 7.x-X86_64
k8s-node2 42.51.227.115 Centos 7.x-X86_64
k8s-node3 42.51.227.116 Centos 7.x-X86_64在各节点执行—修改主机名
hostnamectl --static set-hostname k8s-master
hostnamectl --static set-hostname k8s-node1
hostnamectl --static set-hostname k8s-node2
hostnamectl --static set-hostname k8s-node3在各节点执行—修改hosts文件
cat EOF /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
42.51.227.113 k8s-master
42.51.227.114 k8s-node1
42.51.227.115 k8s-node2
42.51.227.116 k8s-node3
EOF在各节点执行—修改DNS
cat EOF /etc/resolv.conf
nameserver 114.114.114.114
nameserver 8.8.8.8
EOF在各节点执行—设置个性主机名
带时间的个性主机名
echo PS1\[\e[37;1m\][\[\e[36;40m\]\t\[\e[32;40m\]\u\[\e[33;40m\]\[\e[31;40m\]\h \[\e[34;40m\]\w\[\e[37;1m\]]\\$\[\e[m\] .bashrc不带时间的个性主机名
echo PS1\[\e[37;1m\][\[\e[36;40m\]\[\e[32;40m\]\u\[\e[33;40m\]\[\e[31;40m\]\h \[\e[34;40m\]\w\[\e[37;1m\]]\\$\[\e[m\] .bashrc在各节点执行—关闭CentOS7自带的防火墙服务
systemctl disable firewalld systemctl stop firewalld在各节点执行—关闭selinux
sed -i s/enforcing/disabled/ /etc/selinux/config setenforce 0在各节点执行—互相信任
ssh-keygen
ssh-copy-id xxx在各节点都采用网络时间服务器
安装时间服务器软件
yum install -y chrony修改配置文件/etc/chrony.conf
sed -i -e /^server/d -e 1aserver ntp.aliyun.com iburst\nserver tw.pool.ntp.org iburst -e /local stratum 10/clocal stratum 10\nbindcmdaddress 127.0.0.1\nbindcmdaddress ::1 /etc/chrony.confchronyd服务启动并自启
systemctl enable chronyd --now systemctl restart chronyd检查323 udp端口的监听是否是*:323
ss -ntlup | grep 323检查时间同步状态
chronyc sources在各节点执行—安装基础软件ebtables ethtool否则执行 kubeadm init会报错
yum install vim wget yum-utils device-mapper-persistent-data lvm2 ebtables ethtool -y在各节点执行—添加阿里yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache在各节点执行—添加docker阿里yum源–选一项即可
1.
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum makecache fast在各节点执行—配置kubernetes国内阿里yum源
cat EOF /etc/yum.repos.d/kubernetes.repo
[kubernetes]
nameKubernetes
baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled1
#gpgcheck1
#repo_gpgcheck1
gpgkeyhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF在各节点执行—生成缓存
yum makecache fast -y在各节点执行—生成系统及软件包
yum update -y在各节点执行—安装docker-ce—不指定版本将安装最新版本
yum -y install docker-ce如果指定版本:
1.列出所有版本的 Docker CE
yum list docker-ce --showduplicates | sort -r
2.可以安装特定版本
yum install docker-ce-18.06.2.ce-3.el7 containerd.io -y在各节点执行—启动docker并设置为开机启动
systemctl enable docker --now在各节点执行—配置镜像加速器和日志驱动和修改docker cgroup驱动与k8s一致使用systemd方式
sudo tee /etc/docker/daemon.json -EOF
{ registry-mirrors: [https://nty7c4os.mirror.aliyuncs.com],live-restore:true,exec-opts:[native.cgroupdriversystemd],log-driver:json-file,log-opts:{max-size:100m,max-file:3}
}
EOFPs备注systemd是系统自带的cgroup管理器, 系统初始化就存在的, 和cgroups联系紧密,为每一个进程分配cgroups, 用它管理就行了. 如果设置成cgroupfs就存在2个cgroup控制管理器, 实验证明在资源有压力的情况下,会存在不稳定的情况.cgroupfs是docker自带的
热加载配置和重启docker
systemctl daemon-reload systemctl restart docker在各节点执行—升级内核到5.7
自带3.10内核存在BUG建议升级到4.10.x及以上版本
BUG介绍https://myit.icu/index.php/archives/389/
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
在各节点执行---安装kernel-ml内核 lt长期维护版本ml:长期稳定版本
yum -y --enablerepoelrepo-kernel install kernel-ml.x86_64 kernel-ml-devel.x86_64
在各节点执行---查看启动器
awk -F\ $1menuentry {print i : $2} /etc/grub2.cfg
在各节点执行---设置默认启动为新内核---0后边内核为5.x,根据实际情况选择
grub2-set-default 0
在各节点执行---重启系统
reboot
Ps重启后查看内核是否为5.8.xxx按当时装的最新版本为准在各节点执行—永久关闭swap
swapoff -a sed -i s/.*swap.*/#/ /etc/fstabkubernetes的想法是将实例紧密包装到尽可能接近100。 所有的部署应该与CPU /内存限制固定在一起。 所以如果调度程序发送一个pod到一台机器它不应该使用交换设计者不想交换因为它会减慢速度所以关闭swap主要是为了性能考虑。
在各节点执行—加载 ipvs 模块保证在节点重启后能自动加载所需模块—kube-proxy开启ipvs的前置条件
yum install ipset ipvsad -ycat /etc/sysconfig/modules/ipvs.modules EOF
#!/bin/bash
#开启ipvs最新支持的负载均衡SLB
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4 # 内核新版本改为nf_conntrack
modprobe -- br_netfilter
EOF在各节点执行—赋值权限并执行生效
chmod 755 /etc/sysconfig/modules/ipvs.modules bash /etc/sysconfig/modules/ipvs.modules加载生效出现报错请修改
内核使用最新版本4.19.1无法加载nf_conntrack_ipv4模块
4.19.1最新版本的内核nf_conntrack_ipv4已经修改为nf_conntrack。在各节点执行—查看是否已经正确加载所需的内核模块
lsmod | grep -e ip_vs -e nf_conntrack_ipv4在各节点执行—关闭邮箱服务(节省内存根据自己实际来定)
systemctl stop postfix.service systemctl disable postfix.service在各节点执行—查看kubernetes源当前状态
yum repolist all | grep kubernetes如果源状态为disable则需要开启—执行如下命令使kubernetes源生效。
对于CentOS执行yum-config-manager --enable 时“repo_name”是执行yum repolist all | grep kubernetes时回显的第二个字段“Kubernetes”“K”为大写
在各节点执行—安装kubelet不指定版本将安装最新版本
yum -y install kubelet kubeadm kubectl --disableexcludeskubernetes参数解析:“–disableexcludeskubernetes”表示在查找包的时候禁止排除kubernetes这个源 查看当前系统存在的kubernetes的版本号
yum list all | grep kubernetes可选也可以指定版本号:kubelet-1.18.2
yum -y install kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2 --disableexcludeskubernetes链接https://github.com/kubernetes/kubernetes/releases
在各节点执行—查看k8s版本号
kubelet --version在各节点执行—查看配置文件目录
# rpm -ql kubelet
/etc/kubernetes/manifests #清单目录
/etc/sysconfig/kubelet #配置文件
/usr/bin/kubelet #主程序
/usr/lib/systemd/system/kubelet.service在各节点执行—设置开机自启
systemctl enable kubelet查看kubenets需要哪些镜像
[rootk8s-master ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.18.2
k8s.gcr.io/kube-controller-manager:v1.18.2
k8s.gcr.io/kube-scheduler:v1.18.2
k8s.gcr.io/kube-proxy:v1.18.2
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7我们可以先提前下载这些镜像—但是要确认是否使用了代理因为国内无法访问k8s.gcr.io
kubeadm config images pull如果没有国外代理机器就使用以下脚本来使用阿里源镜像仓库下载后更改标签为k8s.gcr.io
方法
vim /root/pullimages.sh
#!/bin/bash
#https://deanit.cn
#使用阿里镜像仓库
#查看版本号并替换为阿里镜像仓库源下载
kubeadm config images list | sed -e s/^/docker pull /g -e s#k8s.gcr.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g | sh -x
#将镜像名字更改为原来的k8s.gcr.io
docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk {print docker tag,$1:$2,$1:$2} | sed -e s/registry.cn-hangzhou.aliyuncs.com\/google_containers/k8s.gcr.io/2 | sh -x
#将从阿里镜像仓库下载的镜像删除
docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk {print docker rmi $1:$2} | sh -x赋值脚本权限并执行
chmod ax /root/pullimages.sh sh /root/pullimages.shNode节点
Node节点仅需要这两个镜像所以使用上边办法单独下载这两个镜像即可。
k8s.gcr.io/kube-proxy:v1.18.2
k8s.gcr.io/pause:3.2在k8s-master节点执行—使用kubeadm初始化集群
指定版本需要与我们上边安装的版本一致–kubernetes-versionv1.18.2
不指定版本不指定版本不添加–kubernetes-versionv1.18.2参数即可
kubeadm init --kubernetes-versionv1.18.2 --apiserver-advertise-address42.51.227.113 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr10.244.0.0/16 --service-cidr10.96.0.0/12 --ignore-preflight-errorsSwap --dry-run重要提示–dry-run试运行不应用任何变化;输出将要完成的工作测试没问题后将该参数去掉执行即可
Ps由于默认拉取镜像地址k8s.gcr.io国内无法访问这里指定阿里云镜像仓库地址。如果使用以上的两个方法拉取镜像这里就不用再次指定镜像仓库地址就行了。
在k8s-master节点执行—初始化完成后,根据提示执行以下三步
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config保存以下内容用于添加节点时需要
kubeadm join 42.51.227.113:6443 --token p1vfu6.qt4hypzpvoyxfuaf \
--discovery-token-ca-cert-hash sha256:6534570565aa1a8b66539287f2e478201bad41fa8c0fe2811533442e51f882f5 在k8s-master节点执行安装Pod网络插件—加入flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlPs确保能够访问到quay.io这个registery有时会出现连接失败我们可以先通过wget下载yml文件再进行安装。 在k8s-master节点执行—查看flannel镜像
可以通过docker image list镜像列表看到quay.io/coreos/flannel镜像被下载,大小为52.8MB因网络原因下载镜像慢可以等一会即可查看到flannel镜像
[rootk8s-master ~]# docker images 执行了加入flannel命令并不代表就可以使用我们可以通过kubectl get pods -n kube-system来获取当前系统上正在运行的pods我们看到flannel处于正在运行的状态才算正常
待测试方法
使用pod的网络通讯这里使用七牛云镜像七牛云相当于CDN资源
#下载flannel
curl -o kube-flannel.yml https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#替换为七牛云镜像
sed -i s/quay.io\/coreos\/flannel/quay-mirror.qiniu.com\/coreos\/flannel/g kube-flannel.yml
#加入
kubectl apply -f kube-flannel.yml
#删除
rm -f kube-flannel.yml在k8s-master节点执行—验证pod信息—查看system名称空间下的所有pod**
[rootk8s-master ~]# kubectl get pod -n kube-system
kubectl get pods -o wide -A #查看所有pod详细信息以上信息我们看到kube-flannel-ds-amd64-ckp6m已经处于运行中
验证集群节点
上面执行完命令后集群不会马上变成ready状态因为系统需要去下载docker镜像稍等片刻后我们可以执行一下命令验证集群状态。
-o wide表示查看消息信息
kubectl get node效果等于kubectl get nodes[rootk8s-master ~]# kubectl get node -o wide验证pod信息查看system命名空间下的所有pods
[rootk8s-master ~]# kubectl get pod -n kube-systemPs当所有节点都变成ready后所有pod的ready都变成1/1表示集群搭建完成