文章目录

  • 前言
  • 一、环境配置
    • 1.系统镜像
    • 2.环境要求
    • 3. 静态ip配置
    • 4.关闭防火墙
    • 5. 关闭selinux
    • 6. 关闭swap(k8s禁止虚拟内存以提高性能)
    • 7. 配置host
    • 8. 设置网桥参数
    • 9.更新时间
  • 二、docker安装
    • 10.更新yum源
    • 11.安装docker
    • 12.配置开机自启
    • 13.配置加速器
    • 13.docker查看命令
  • 四、k8s安装
    • 14. 添加k8s的阿里云YUM源
    • 15. 安装 kubeadm,kubelet 和 kubectl
    • 16.开机自启
    • 17.查看是否安装成功
    • 18.半路总结
    • 19.初始化主节点
    • 20.初始化node节点
    • 21.网络插件
    • 22.测试

前言

对于学习k8s时,搭建环境是一个很麻烦的一步,在此,阐述下虚拟机搭建k8s,一主一从。请大家参考,如果想要虚拟机,可直接留言获取。

一、环境配置

1.系统镜像

我使用的镜像为CentOS Linux release 7.9.2009 (Core),镜像可以从官方下载,也可以留言即可找我要已经安装好的虚拟机。

[root@k8smaster ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

2.环境要求

  • 一台或多台机器,操作系统CentOS 7
  • 硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+;
  • 集群内各个机器之间能相互通信;
  • 集群内各个机器可以访问外网,需要拉取镜像;
  • 禁止swap分区;

3. 静态ip配置

本人虚拟机使用的是NAT模式,配置如下,大家参考下即可。

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="49c13795-9323-433a-af08-caacd886f189"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.16.135"
NETMASK="255.255.255.0"
DNS1="192.168.16.2"

4.关闭防火墙

k8s一般是在内部网络使用,而且这也是学习环境,直接关闭防火墙,避免网络通讯的困扰。

systemctl stop firewalld
systemctl disable firewalld

5. 关闭selinux

#永久
sed -i 's/enforcing/disabled/' /etc/selinux/config
#临时
setenforce 0

6. 关闭swap(k8s禁止虚拟内存以提高性能)

#永久
sed -ri 's/.*swap.*/#&/' /etc/fstab
#临时
swapoff -a

7. 配置host

这里要根据实际情况进行配置。配置好对应的master节点和node节点。

cat >> /etc/hosts << EOF
192.168.16.135 k8smaster
192.168.16.137 k8snode
EOF

8. 设置网桥参数

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#生效
sysctl --system

9.更新时间

yum install ntpdate -y
ntpdate time.windows.com

二、docker安装

10.更新yum源

#可选
yum install wget -ywget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

11.安装docker

yum install docker-ce-19.03.13 -y

12.配置开机自启

systemctl enable docker.service

13.配置加速器

默认情况下,docker拉取镜像速度挺慢的,可以通过设置阿里云加速器
加速器配置
配置完成之后可以将docker重启一下
docker重启

systemctl restart docker.service

13.docker查看命令

查看docker状态

systemctl status docker.service

查看当前已下载的镜像

docker images

拉取镜像

docker pull hello-world

运行镜像

[root@k8snode ~]# docker run hello-worldHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

如此docker安装成功。

四、k8s安装

14. 添加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

15. 安装 kubeadm,kubelet 和 kubectl

 yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y

16.开机自启

systemctl enable kubelet.service

17.查看是否安装成功

yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectl

版本查看

[root@k8snode ~]# kubelet --version
Kubernetes v1.19.4

18.半路总结

如果正确安装到这里的时候,已经成功安装一大半了,如上的配置都是需要在所有的节点进行配置。可通过xshell工具将所有指令发送到所有的虚拟机,操作如下。


另外,有一些配置是需要重启才能生效的,因此,这里可以重启一下。

19.初始化主节点

kubeadm init --apiserver-advertise-address=192.168.16.135 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

192.168.16.135是主节点的地址,要自行修改。其它的不用修改。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

最后查看节点信息

kubectl get nodes

20.初始化node节点

kubeadm join 192.168.16.135:6443 --token a0n3bj.8o7dhcphidtid5fk \--discovery-token-ca-cert-hash sha256:00b608e1314662953a52975c2b5c6c2f4440d2abb255434e459935ba373fa4e8

如上这段仅仅是参考,实际部署的时候这段join命令会在主节点init命令的时候进行打印
至此通过kubectl get nodes查看的时候所有的节点是NotReady状态。

21.网络插件

将如下保存为kube-flannel.yml文件。在主节点上执行即可

kubectl apply -f kube-flannel.yml

执行完毕稍等1分钟左右,再次查看通过kubectl get nodes查看。

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: psp.flannel.unprivilegedannotations:seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/defaultseccomp.security.alpha.kubernetes.io/defaultProfileName: docker/defaultapparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/defaultapparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:privileged: falsevolumes:- configMap- secret- emptyDir- hostPathallowedHostPaths:- pathPrefix: "/etc/cni/net.d"- pathPrefix: "/etc/kube-flannel"- pathPrefix: "/run/flannel"readOnlyRootFilesystem: false# Users and groupsrunAsUser:rule: RunAsAnysupplementalGroups:rule: RunAsAnyfsGroup:rule: RunAsAny# Privilege EscalationallowPrivilegeEscalation: falsedefaultAllowPrivilegeEscalation: false# CapabilitiesallowedCapabilities: ['NET_ADMIN', 'NET_RAW']defaultAddCapabilities: []requiredDropCapabilities: []# Host namespaceshostPID: falsehostIPC: falsehostNetwork: truehostPorts:- min: 0max: 65535# SELinuxseLinux:# SELinux is unused in CaaSPrule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
rules:
- apiGroups: ['extensions']resources: ['podsecuritypolicies']verbs: ['use']resourceNames: ['psp.flannel.unprivileged']
- apiGroups:- ""resources:- podsverbs:- get
- apiGroups:- ""resources:- nodesverbs:- list- watch
- apiGroups:- ""resources:- nodes/statusverbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-systemlabels:tier: nodeapp: flannel
data:cni-conf.json: |{"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-dsnamespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linuxhostNetwork: truepriorityClassName: system-node-criticaltolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: quay.io/coreos/flannel:v0.13.0command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.13.0command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN", "NET_RAW"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg

22.测试

k8s环境安装成功,拉取nginx镜像进行测试。

#创建deploy
kubectl create deployment nginx --image=nginx
#开放端口
kubectl expose deployment nginx --port=80 --type=NodePort

查看端口

[root@k8smaster ~]# kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        2d17h
nginx        NodePort    10.109.58.243   <none>        80:32024/TCP   4s

32024是可以访问的端口。
node节点ip:32024即可访问。137是我配置的node节点的ip。

【k8s】虚拟机k8s搭建教程相关推荐

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

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

  2. k8s集群搭建教程(centos k8s搭建)

    系统:CentOS 7.8 内核:3.10.0 一.Master.Node节点都要安装Docker 1. 卸载原来的docker sudo yum remove docker \docker-clie ...

  3. CentOS7虚拟机节点搭建教程

    前言 在实际开发中我们经常会遇到很多预料之外的bug可能对操作系统有一定影响,从虚拟机作用来看可以帮助我们测试开发程序并避免重新安装某些软件,同时这是一个独立的环境保密性较高利于保护开发资料. 一 虚 ...

  4. 【云原生-K8s】kubeadm搭建安装k8s集群v1.25版本完整教程【docker、网络插件calico、中间层cri-docker】

    前言 基础描述 从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能 ...

  5. 搭建 K8S 环境:Centos7安装生产环境可用的K8S集群图文教程指南

    搭建 K8S 环境:Centos7安装生产环境可用的K8S集群图文教程指南 一. K8S 简介 二. K8S 学习的几大拦路虎 2.1 K8S 安装对硬件要求比较高 2.2. K8S 对使用者来说要求 ...

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

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

  7. k8s集群搭建-1mater2node

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

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

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

  9. 虚拟机屏幕显示不全(界面大小更改 )虚拟机Ubuntu18.04 的超详细环境搭建教程/步骤 SDN软件定义网络实验

    打开虚拟机后,我们可能发现,桌面周围有大量黑边,且有些界面无法完整显示,影响我们的感受和操作!!!  解决方法: (1)点击箭头所指,进入目录 (2)点击箭头所指的齿轮,进入"setting ...

最新文章

  1. chm帮助文档出现乱码
  2. Educational Codeforces Round 93 (Rated for Div. 2)
  3. C++:37---继承概念、继承种类
  4. 高通骁龙888来了!新命名就是为了中国,小米11将全球首发
  5. matlab极坐标下的二维傅里叶变换_形象理解二维傅里叶变换
  6. python语句块的定义_第五章、Python语句
  7. 四叶草社交平台——十天冲刺(7)
  8. python使用正则验证电子邮件_在Python中使用正则表达式提取电子邮件地址
  9. 大数据技术原理与应用-林子雨课后(部分习题答案)
  10. Java 程序员常用资源工具集合(建议收藏)
  11. docker容器—搭建LNMP
  12. 软件测试入门知识,Linux系统基础教程——带你玩转Linux(五)
  13. 华为鸿蒙支持APP,曝华为鸿蒙 2.0 将于 6 月 2 日正式登场,200+ 主流 App 已支持
  14. 蓝牙进阶之路 (003) - AT指令(转)
  15. 高性能架构学习路线图-分布式架构演进
  16. 基本shell命令学习
  17. FormData是什么
  18. SAS9.4 修改sashost.dll系统时间
  19. java程序阅读题6,阅读以下说明和java程序,填补代码中的空缺(1)~(6),将解答填入答题纸的对 - 信管网...
  20. linux打开开发者权限,在UOS系统中关闭开发者模式和在UOS个人版中打开开发者模式...

热门文章

  1. 618私藏好物推荐!看这份清单就够了!
  2. vue.js海康威视监控使用,以及遇到的问题
  3. 大批 IDEA 激活码到期之后的乱象...
  4. 标梵为你推荐可以吸引消费者的品牌营销策划
  5. 数据结构之出栈顺序题(秒杀技巧)
  6. C 设计模式 PPT及源码分享
  7. c++编程幸运“52”小游戏
  8. Mysql——存储引擎
  9. 个人总结ppt里的一张幻灯片
  10. Kotlin高阶函数