环境准备

集群数量此次使用3台CentOS 7系列机器

节点名称 节点IP
k8s-master01 192.168.0.150
k8s-node01 192.168.0.151
k8s-node02 192.168.0.152

设置系统别名

hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02

查看设置成功

hostname

设置hosts

vi /etc/hosts192.168.0.150 k8s-master01
192.168.0.151 k8s-node01
192.168.0.152 k8s-node02

设置成功

安装依赖包(所有)

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wgetvimnet-tools git

设置防火墙为 Iptables 并设置空规则

systemctl stop firewalld && systemctl disable firewalld
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables&& iptables -F && service iptables save

关闭 SELINUX

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

调整内核参数,对于 K8S

cat > kubernetes.conf<<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
cp kubernetes.conf  /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

调整系统时区

# 设置系统时区为中国/上海
timedatectl set-timezone Asia/Shanghai
# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond

关闭系统不需要服务

systemctl stop postfix && systemctl disable postfix

设置 rsyslogd 和 systemd journald

mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘
Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
SystemMaxUse=10G
# 单日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存时间 2 周
MaxRetentionSec=2week
# 不将日志转发到 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald

关闭系统不需要服务设置 rsyslogd 和 systemd journald升级系统内核为 4.44及以上

CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,例如: rpm -Uvhhttp://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm


rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 设置开机从新内核启动
grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)'
reboot

uname -r

环境准备好了,开始部署集群

kube-proxy开启ipvs的前置条件

modprobe br_netfilter
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&lsmod | grep -e ip_vs -e nf_conntrack_ipv4

安装 Docker 软件


yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum update -y && yum install -y docker-ce
## 创建 /etc/docker 目录
mkdir /etc/docker
# 配置 daemon.
cat > /etc/docker/daemon.json <<EOF
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m" }
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# 重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

docker -v

安装 Kubeadm (主从配置)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=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
EOF
yum -y  install  kubeadm kubectl kubelet
systemctl enable kubelet.service

如果遇到安装不了

解决方案
重启试试

 yum clean all

再次操作
kubeadm version

初始化主节点

kubeadm init \
--apiserver-advertise-address=192.168.0.150 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.2 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16


建议至少2 cpu ,2G,非硬性要求,1cpu,1G也可以搭建起集群。但是:
1个cpu的话初始化master的时候会报 [WARNING NumCPU]: the number of available CPUs 1 is less than the required 2
部署插件或者pod时可能会报warning:FailedScheduling:Insufficient cpu, Insufficient memory
如果出现这种提示,说明你的虚拟机分配的CPU为1核,需要重新设置虚拟机master节点内核数。

查看镜像

docker images

2)使用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命令了

kubectl get node

kubectl get pod --all-namespaces


node节点为NotReady,因为corednspod没有启动,缺少网络pod

安装calico网络

[root@k8s-master01 ~]# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created

查看pod和node

出现这个等待

查看命名空间为kube-system 的pods

kubectl get pods -n kube-system


查看其详细信息

kubectl describe pod calico-node-t4r8w  -n kube-system


多等会就好了有可能是网络问题

kubectl get pods -n kube-system
kubectl get node

加入node

kubeadm join 192.168.0.150:6443 --token pbi1bu.as6kf2w36bdjnw9r --discovery-token-ca-cert-hash sha256:020160ae69ae980d6bd942e2bcfdd47330476317ccb09c161e3853db51dd97e0

node1和node2 加入

查看节点是否安装成功

 kubectl get node

如果token忘记了,则可以通过如下操作:

1)查看token,如果token失效,则重新生成一个

 kubeadm token listkubeadm token create

2)获取ca证书sha256编码hash值

 openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

3)节点加入集群
kubeadm join 192.168.0.150:6443 --token pbi1bu.as6kf2w36bdjnw9r --discovery-token-ca-cert-hash sha256:020160ae69ae980d6bd942e2bcfdd47330476317ccb09c161e3853db51dd97e0

测试kubernetes集群

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get podskubectl get pod,svc


等待执行完看结果

kubectl get pod,svc -o wide

在node1 查看

docker ps -a | grep nginx


其他命令:显示Pod的更多信息

kubectl get pod nginx-f89759699-dgd5x -o wide

其他命令: 以yaml格式显示Pod的详细信息

kubectl get pod  nginx-f89759699-dgd5x -o yaml

浏览器查看 都可以查看
http://192.168.0.150:31844/
http://192.168.0.151:31844/
http://192.168.0.152:31844/

删除pod

kubectl delete pod nginx-f89759699-dgd5x

扩容

kubectl scale deploy/nginx --replicas=3
kubectl get pod
kubectl get pod nginx-f89759699-dgd5x -o wide



进入pod

 kubectl exec -ti nginx-f89759699-8c62t -- /bin/sh
cd /usr/share/nginx/html

安装kubernetes-dashboard

官方部署dashboard的服务没使用nodeport,将yaml文件下载到本地,在service里添加nodeport

wget  https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml
kubectl create namespace kubernetes-dashboard
vi recommended.yamlkind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:type: NodePortports:- port: 443targetPort: 8443nodePort: 30000selector:k8s-app: kubernetes-dashboard

创建运行

kubectl create -f recommended.yaml

安装失败了,怎么清理环境重新安装啊?执行一条命令:(慎用)

 kubeadm reset

参考

https://www.kubernetes.org.cn/7189.html
https://www.cnblogs.com/caoxb/p/11243472.html

k8s集群搭建(亲测有效)相关推荐

  1. mongodb生成自签名证书以及配置SSL以及mongo集群搭建(亲测有效)版本-5.0.6

    @[TOC](mongodb生成自签名证书以及配置SSL(亲测有效) 版本-5.0.6 一直以来都是向大神学习,今天也做回大神分享,哈哈!!几个小时的努力不算白费. 一.自签名证书生成 1.生成根证书 ...

  2. 记一次在K8s集群搭建的MySQL主从无法正常启动之数据迁移恢复实践

    本章目录:记一次在K8s集群搭建的MySQL主从无法正常启动之数据迁移恢复实践 描述:在K8s集群中里利用bitnami提供的mysql:5.7.32-debian-10-r61镜像并利用helm进行 ...

  3. K8S集群搭建:利用kubeadm构建K8S集群

    master主服务器配置 #--kubernetes-version=v1.14.1指定版本 #--pod-network-cidr=10.244.0.0/16 指定虚拟IP的范围(以10.244开头 ...

  4. 2019最新k8s集群搭建教程 (centos k8s 搭建)

    2019-k8s-centos 2019最新k8s集群搭建教程 (centos k8s 搭建) 网上全是要么过时的,要么残缺的,大多数都是2016年,2017年的文档,照着尝试了N次,各种卸了重装,最 ...

  5. k8s集群搭建-1mater2node

    k8s安装以及安装过程中遇到的问题 背景:因为公司需要针对operator进行开发,Operator 是 Kubernetes API 的客户端,充当自定义资源的的控制器.自己之前没有搞过k8s,所以 ...

  6. 本地k8s集群搭建保姆级教程(4)-安装k8s集群Dashboard

    安装k8s集群管理UI 1 Dashboard安装 1.1 参考文档 Dashboard 是基于网页的 Kubernetes 用户界面. 你可以使用 Dashboard 将容器应用部署到 Kubern ...

  7. @以最缓和的方式 解决 K8S 集群搭建过程中遇到的问题

    以最缓和的方式解决 K8S 集群搭建过程中遇到的问题 问题描述 启用 minikube dashboard之后,用 kubectl proxy 命令遇到错误 kubectl proxy error: ...

  8. k8s集群搭建普若米修斯,监控rabbitmq集群

    背景 这几天在做关于容器化部署的工作,这里做一个简单的分享,给容器内的rabbitmq集群+一个普若米修斯监控服务 先决条件: 拥有一个k8s集群(一主2从) k8s集群上已经搭建了rabbitmq集 ...

  9. K8S集群搭建(kubeadm)

    目录 引言: 一.部署规划 二.部署环境(以下操作需要每一台设备都进行相应的修改) 1.关闭防火墙等安全策略 2.修改主机名 3.映射 三.部署(每一台设备都进行相同操作) 1.安装docker(并设 ...

最新文章

  1. Linux的完全免费特性
  2. LSTM 时间序列数据的异常检测
  3. mysql锁机制为何设计如此复杂_再谈mysql锁机制及原理—锁的诠释
  4. 为什么一流成功人士的闹钟都定在早晨5:57?
  5. spring AOP 之五:Spring MVC通过AOP切面编程来拦截controller
  6. linux svn 备份脚本,SVN热备份脚本
  7. python生成簇_不调包用PYTHON写GMM(高斯混合模型)算法
  8. 面试官系统精讲Java源码及大厂真题 - 27 Thread 源码解析
  9. java mysql mac 安装_最新版MySQL在MacOS上的安装与使用!
  10. 证券计算机行业研究,20210630-首创证券-计算机行业深度报告:物联网,研究框架.pdf...
  11. Pads logic 创建文件时发生严重错误
  12. Parallels Desktop:pd虚拟机 17 for mac
  13. 高响应比优先调度算法(HRRN)例题详解
  14. 微信小程序tabbar美化(中间图标突起)
  15. 网络流中 InputStream.available() = 0 问题探究
  16. 时间或许从未流逝,而人在氧化新陈代谢与日升日落中,以自己为坐标,定义了时间!...
  17. 分析家数据格式、结构
  18. python处理数据之xlwings库学习
  19. 神经网络及其变种串联
  20. excel同一行中如何添加换行

热门文章

  1. 简单逆向10(z3-solver)
  2. 多数据中心架构,异地多活架构
  3. 使用webpack将ES6转化ES5, Browerify
  4. 为什么日本是世界上少有的“100V电压国家”,并且就连国内都不能统一供电频率?
  5. Lightdm简介和常用配置
  6. 你是哪个级别?(工程师级别划分)
  7. 两轮车燃油喷射系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 单位内网访问外网的二种方式
  9. “高定美学”品牌矩阵:「莲玉芳华」「琢我」「佐我」佐我气运系列之进击
  10. c语言浮点变量是什么意思,C语言中说的浮点型是什么意思呢 C语言的浮点数是什么...