K8S专题-基础组件的部署1
文章目录
- 前言
- 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节点添加进集群失败,可以删除节点重新添加
要删除 k8snode1 这个节点,首先在 master 节点上依次执行以下两个命令
kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8s-node1
执行后通过 kubectl get node 命令可以看到 k8snode1 已被成功删除
接着在 k8snode1 这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来,之后就可以重新执
行命令添加到集群
kubeadm reset
总结
K8S专题-基础组件的部署1相关推荐
- K8S专题-dashboardUI组件2
文章目录 前言 粘贴复制有风险 K8s Dashboard UI实战:(没有配置证书的话可能无法访问),不要被浏览器给偏了,火狐浏览器可以访问呢 1)下载Dashboard配置文件: 2)修改文件re ...
- K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目
K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目 1.前言 2.简介 2.1.为什么写这篇文章 2.2.需求描述 2.3.需求分析 3. 部署实战 3.1 环境准备 3.2 i ...
- 【云原生|K8s系列第1篇】:K8s的基础概念、组件架构及实战安装
云原生|K8s系列第1篇目录 1.先从K8s不是什么讲起 2.K8s是什么及核心基础概念 2.1 Container容器 2.2 Pod 2.3 Node 2.4 Label 2.5 Annotati ...
- 持续集成与持续部署(五)03-TravisCI——Travis CI和Docker的持续集成之所使用的基础组件、dockerfile配置、docker部署脚本
持续集成与持续部署(五)03-TravisCI--Travis CI和Docker的持续集成之所使用的基础组件.dockerfile配置.docker部署脚本 所使用的基础组件 代码托管在Github ...
- 259. 部署K8S云驱动组件CloudDriver
文章目录 部署K8S云驱动组件CloudDriver 1. 准备镜像 2. 制作minio的secret 3. 准备k8s的用户配置 3.1 签发证书 3.2 做kubeconfig配置 3. 创建C ...
- k8s 1.17.3 二进制部署
K8s简介 Kubernetes(简称k8s)是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容 ...
- k8s pod基础概念
k8s pod基础概念 Pod基础概念: Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象.一个Pod代表着集群中运行的一个进程.kubernetes中其他大 ...
- k8s业务迁移与服务部署实践
K8s运行业务的优势 部署上线业务流程 情景模拟: 业务部署上线是每个运维都需要面对的问题,接下来分别从传统运维和k8s运维角度,梳理操作流程: 传统运维: 安装操作系统 初始化系统配置(安全策略.时 ...
- K8S在centos7虚拟机上部署集群
目录 一.创建centos7虚拟机 二.部署 三.重新初始化 四.启动时常见错误: 一.创建centos7虚拟机 一:创建centos7虚拟机 我是在VMware上创建的,版本是WORKSTATION ...
最新文章
- K-近邻算法之案例:鸢尾花种类预测—流程实现
- html圆角边框只有左边,border-radius以外的CSS圆角边框制作方法
- 更改eclipse tomcat jvm heap
- 配置php.ini文件,关闭错误提示,打开错误日志,设置错误日志路径(亲测)
- php注释验证,注解验证 · ThinkPHP6.0完全开发手册 · 看云
- springboot---request 中Parameter,Attribute区别
- ApacheCN 安卓译文集 20211225 更新
- L1-029. 是不是太胖了-PAT团体程序设计天梯赛GPLT
- 查找表_leetcode454
- android的Imageview的src和background
- itext poi 学习之旅 (3)读取数据库信息并由excel展现出来
- 如何打印被加密的PDF文件
- 新浪tcn短网址短链接在线生成器推荐
- 最少拍控制算法MATLAB仿真,最少拍控制系统.doc
- HTML5+CSS3教程1
- allegro库函数 c语言,[转载]Allegro之Dev-Cpp版上手指南
- python实现线性回归之梯度下降法,梯度下降详解
- 区块链投资机构风起云涌 Mixed Elements为何能更胜一筹!
- 命令模式在开源代码中的应用
- Android 中的权限
热门文章
- 警惕分页中的checkbox
- 在使用SVN,下载文件到本地时,一定要把全目录下载下来!
- Spring @Autowired 调用别的包下的Bean 解决方法
- sql无效字符 执行sql语句报错解决方案
- webpack 4.0 配置方法以及错误解决
- Eclipse 乱码 解决方案总结(UTF8 -- GBK)
- iOS VideoToolBox decoder解码失败(-12909和-12911)问题解决
- 如何链接到Multimarkdown中的命名锚点?
- 静态类型和动态类型的语言有什么区别?
- mysql centos7安装_Linux——CentOS7之mysql5.7安装与配置