文章目录

  • 前言
  • 1.最好是手动
  • 2.Docker安装
  • 3.K8S
    • **在`kubeadm init` 之前kubelet会不断重启**
  • 总结

前言

1.最好是手动

2.Docker安装

# 安装依赖软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker repository,这里使用国内阿里云yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker-ce,这里直接安装最新版本
yum install -y docker-ce-19.03.5 docker-ce-cli-19.03.5
#修改docker配置文件
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"],"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}
EOF
# 注意,由于国内拉取镜像较慢,配置文件最后增加了registry-mirrors
mkdir -p /etc/systemd/system/docker.service.d
# 重启docker服务
systemctl daemon-reload
systemctl enable docker.service
systemctl start docker.service
ps -ef|grep -aiE docker
yum remove -y docker*
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker

3.K8S

准备三台2核4G的虚拟机(内存至少2G以上)

#1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld#2、关闭 selinux
sed ‐i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
setenforce 0 # 临时关闭#3、关闭 swap
swapoff ‐a # 临时关闭
vim /etc/fstab # 永久关闭
#注释掉swap这行
# /dev/mapper/centos‐swap swap swap defaults 0 0systemctl reboot #重启生效
free ‐m #查看下swap交换区是否都为0,如果都为0则swap关闭成功#4、给三台机器分别设置主机名
hostnamectl set‐hostname <hostname>
第一台:k8s‐master
第二台:k8s‐node1
第三台:k8s‐node2hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2#5、在 k8s‐master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip
cat >> /etc/hosts << EOF
192.168.79.141 k8s‐master
192.168.79.142 k8s‐node1
192.168.79.143 k8s‐node2
EOF#6、将桥接的IPv4流量传递到iptables
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge‐nf‐call‐ip6tables = 1
net.bridge.bridge‐nf‐call‐iptables = 1
EOFsysctl --system # 生效 这个也要同时执行,每次重新启动#7、设置时间同步 , 这个要特别小心,同时执行
yum install ntpdate -y
ntpdate time.windows.com#8、添加k8s yum源
cat>/etc/yum.repos.d/kubernetes.repo<<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
#https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#更新缓存
yum clean all
rm -rf /var/cache/yum
yum -y makecache#9、如果之前安装过k8s,先卸载旧版本
yum remove -y kubelet kubeadm kubectl#10、查看可以安装的版本
yum list kubelet --showduplicates |sort -r#11、安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0#12、开机启动kubelet
systemctl enable kubelet
systemctl start kubelet
ps -ef|grep kubelet

在k8s-master机器上执行初始化操作(里面的第一个ip地址就是k8s-master机器的ip,改成你自己机器的,后面两个ip网段不用动)

kubeadm reset
#y

kubeadm init 之前kubelet会不断重启

rm -rf /var/lib/etcd
#删除污点
rm -rf /var/lib/kubelet/cpu_manager_statekubeadm init --apiserver-advertise-address=192.168.79.141 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
#代表初始化成功
Your Kubernetes control-plane has initialized successfully!#这段命令需要在master执行下
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config #config要注意啦
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#kubectl get nodes#这段命令需要在所有node节点上执行
kubeadm join 192.168.79.141:6443 --token jya5qv.rtbtwjmcwmxuek5l \--discovery-token-ca-cert-hash sha256:6490ce59854c187222b049884f2585ad79a56be07a29cb17649382acd4c04894

在k8s-master机器上执行如下命令:

#配置使用 kubectl 命令工具(类似docker这个命令),执行上图第二个红框里的命令
mkdir -p $HOME/.kube#把原来创建的删掉
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config#查看kubectl是否能正常使用
kubectl get nodes#Ready#安装 Pod 网络插件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml# 如果上面这个calico网络插件安装不成功可以试下下面这个
# kubectl apply ‐f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml

在所有k8s node机器执行上图第三个红框里的命令

kubeadm join 192.168.79.141:6443 --token jya5qv.rtbtwjmcwmxuek5l \--discovery-token-ca-cert-hash sha256:6490ce59854c187222b049884f2585ad79a56be07a29cb17649382acd4c04894

报错处理方法,其实主要是master机器的内存性能问题比较大,

尝试下将master的交换分区打开swapon -a,然后等完成上面的操作后,将master的交换分区关闭swapoff -a

rm -rf /etc/kubernetes/*
netstat -nltp|grep 10250
systemctl restart kubelet
netstat -nltp|grep 10250tail /var/log/messages
journalctl -xeu kubeletkubeadm token list

出现如上问题的主要原因是之前 kubeadm init 初始化过,所以一些配置文件及服务均已存在,重新执行 kubeadm join 时必然
会导致冲突,解决方法如下:

kubeadm reset
rm -rf /etc/kubernetes/*rm -rf $HOME/.kube/config
rm -rf /var/lib/etcd
#初始化
kubeadm init --apiserver-advertise-address=192.168.79.141 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
#配置
mkdir -p $HOME/.kube #把原来创建的删掉
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configrm -rf /etc/kubernetes/*
systemctl restart kubelet
kubectl delete node k8s-master
systemctl status kubelet
systemctl start kubelet
kubeadm join 192.168.79.141:6443 --token jya5qv.rtbtwjmcwmxuek5l \--discovery-token-ca-cert-hash sha256:6490ce59854c187222b049884f2585ad79a56be07a29cb17649382acd4c04894
#
kubeadm token generate

需要等待一段时间,才能Ready

在k8s-master机器执行查看节点命令

kubectl get nodes

刚刚安装的三个k8s节点都已经准备就绪,大功告成!

如果出现Not Ready,那么node

journalctl -u kubelet >> kubelet.log
systemctl daemon-reload
systemctl restart kubelet

三个节点必须都为Ready

用K8S部署Nginx
在k8s-master机器上执行

# 创建一次deployment部署
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看Nginx的pod和service信息
kubectl get pod,svc -o wide
service/nginx        NodePort    10.96.131.98   <none>        80:30299/TCP   29s   app=nginx
http://192.168.79.141:30299/

补充:如果node节点添加进集群失败,可以删除节点重新添加
要删除 k8s­node1 这个节点,首先在 master 节点上依次执行以下两个命令

kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8s-node1

执行后通过 kubectl get node 命令可以看到 k8s­node1 已被成功删除
接着在 k8s­node1 这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来,之后就可以重新执
行命令添加到集群

kubeadm reset

总结

K8S专题-基础组件的部署1相关推荐

  1. K8S专题-dashboardUI组件2

    文章目录 前言 粘贴复制有风险 K8s Dashboard UI实战:(没有配置证书的话可能无法访问),不要被浏览器给偏了,火狐浏览器可以访问呢 1)下载Dashboard配置文件: 2)修改文件re ...

  2. K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目

    K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目 1.前言 2.简介 2.1.为什么写这篇文章 2.2.需求描述 2.3.需求分析 3. 部署实战 3.1 环境准备 3.2 i ...

  3. 【云原生|K8s系列第1篇】:K8s的基础概念、组件架构及实战安装

    云原生|K8s系列第1篇目录 1.先从K8s不是什么讲起 2.K8s是什么及核心基础概念 2.1 Container容器 2.2 Pod 2.3 Node 2.4 Label 2.5 Annotati ...

  4. 持续集成与持续部署(五)03-TravisCI——Travis CI和Docker的持续集成之所使用的基础组件、dockerfile配置、docker部署脚本

    持续集成与持续部署(五)03-TravisCI--Travis CI和Docker的持续集成之所使用的基础组件.dockerfile配置.docker部署脚本 所使用的基础组件 代码托管在Github ...

  5. 259. 部署K8S云驱动组件CloudDriver

    文章目录 部署K8S云驱动组件CloudDriver 1. 准备镜像 2. 制作minio的secret 3. 准备k8s的用户配置 3.1 签发证书 3.2 做kubeconfig配置 3. 创建C ...

  6. k8s 1.17.3 二进制部署

    K8s简介 Kubernetes(简称k8s)是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容 ...

  7. k8s pod基础概念

    k8s pod基础概念 Pod基础概念: Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象.一个Pod代表着集群中运行的一个进程.kubernetes中其他大 ...

  8. k8s业务迁移与服务部署实践

    K8s运行业务的优势 部署上线业务流程 情景模拟: 业务部署上线是每个运维都需要面对的问题,接下来分别从传统运维和k8s运维角度,梳理操作流程: 传统运维: 安装操作系统 初始化系统配置(安全策略.时 ...

  9. K8S在centos7虚拟机上部署集群

    目录 一.创建centos7虚拟机 二.部署 三.重新初始化 四.启动时常见错误: 一.创建centos7虚拟机 一:创建centos7虚拟机 我是在VMware上创建的,版本是WORKSTATION ...

最新文章

  1. K-近邻算法之案例:鸢尾花种类预测—流程实现
  2. html圆角边框只有左边,border-radius以外的CSS圆角边框制作方法
  3. 更改eclipse tomcat jvm heap
  4. 配置php.ini文件,关闭错误提示,打开错误日志,设置错误日志路径(亲测)
  5. php注释验证,注解验证 · ThinkPHP6.0完全开发手册 · 看云
  6. springboot---request 中Parameter,Attribute区别
  7. ApacheCN 安卓译文集 20211225 更新
  8. L1-029. 是不是太胖了-PAT团体程序设计天梯赛GPLT
  9. 查找表_leetcode454
  10. android的Imageview的src和background
  11. itext poi 学习之旅 (3)读取数据库信息并由excel展现出来
  12. 如何打印被加密的PDF文件
  13. 新浪tcn短网址短链接在线生成器推荐
  14. 最少拍控制算法MATLAB仿真,最少拍控制系统.doc
  15. HTML5+CSS3教程1
  16. allegro库函数 c语言,[转载]Allegro之Dev-Cpp版上手指南
  17. python实现线性回归之梯度下降法,梯度下降详解
  18. 区块链投资机构风起云涌 Mixed Elements为何能更胜一筹!
  19. 命令模式在开源代码中的应用
  20. Android 中的权限

热门文章

  1. 警惕分页中的checkbox
  2. 在使用SVN,下载文件到本地时,一定要把全目录下载下来!
  3. Spring @Autowired 调用别的包下的Bean 解决方法
  4. sql无效字符 执行sql语句报错解决方案
  5. webpack 4.0 配置方法以及错误解决
  6. Eclipse 乱码 解决方案总结(UTF8 -- GBK)
  7. iOS VideoToolBox decoder解码失败(-12909和-12911)问题解决
  8. 如何链接到Multimarkdown中的命名锚点?
  9. 静态类型和动态类型的语言有什么区别?
  10. mysql centos7安装_Linux——CentOS7之mysql5.7安装与配置