准备

服务器:3台机器——1台主、2台工作节点,可以使用virtualbox 搭建虚拟机

主机名 centos version ip docker version flannel version 主机配置 备注
master01 7.7.1908 192.168.56.101 19.03.8 v0.12.0-amd64 2P 2G 20G
node01 7.7.1908 192.168.56.102 19.03.8 v0.12.0-amd64 2P 2G 20G
node02 7.7.1908 192.168.56.103 19.03.8 v0.12.0-amd64 2P 2G 20G

k8s版本

主机名 kubelet version kubeadm version kubectl version 备注
master01 v1.18.2 v1.18.2 v1.18.2
node01 v1.18.2 v1.18.2 v1.18.2
node01 v1.18.2 v1.18.2 v1.18.2

基本设置:

关闭防火墙:

systemctl stop firewalld & systemctl disable firewalld

关闭swap

#临时关闭
swapoff -a
#永久关闭,重启后生效
vi /etc/fstab
#注释以下代码
/dev/mapper/centos-swap swap ...

关闭selinux

#获取状态
getenforce
#暂时关闭
setenforce 0
#永久关闭 需重启
vi /etc/sysconfig/selinux
#修改以下参数,设置为disable
SELINUX=disabled

修改网络配置

# 所有机器上都要进行
$ cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#
$ sysctl --system

统一时间【如果需要】

#统一时区,为上海时区
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
bash -c "echo 'Asia/Shanghai' > /etc/timezone"
#统一使用阿里服务器进行时间更新
yum install -y ntpdate #安装ntpdate工具
ntpdate ntp1.aliyun.com #更新时间

安装docker:

  • 1,删除原有的docker组件
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
  • 2,配置系统docker源
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
## 注意:此处更换了阿里的源,适用国内用户
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 3,查看docker安装列表,选择并安装
sudo yum list docker-ce --showduplicates
# 此处直接安装最新版本的docker-ce
sudo yum install -y docker-ce # 注:如果要安装指定的版本可以参考下边的命令
sudo yum install -y docker-ce-3:19.03.8-3.el7.x86_64
  • 4.启动docker
sudo systemctl  enable docker &&  systemctl  start docker

# 进入阿里云帐号,依次进入:控制台——容器镜像服务(可以搜索到)——镜像中心——镜像加速器。镜像加速器中获取到加速器地址: "https://xxxxxxx.mirror.aliyuncs.com"

#linux下默认文件为/etc/docker/daemon.json,添加下列仓库
$ sudo vi /etc/docker/daemon.json {
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
} # 重启docker使其生效
$ sudo systemctl restart docker

安装K8S组件:

  • 1,更新K8S源
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  • 2, kubelet、kubeadm、kubectl
$ yum install -y kubelet kubeadm kubectl
# 启动kubelet 服务
$ systemctl enable kubelet && systemctl start kubelet

host配置

#分别在服务器上修改hostname,使用hostnamectl命令,或者直接修改/etc/hostname 文件
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02 #每台机器都执行
# cat >> /etc/hosts << EOF
192.168.56.101 master01
192.168.56.102 node01
192.168.56.103 node02
EOF # check
# cat /etc/hosts

验证MAC地址确保唯一

# enp0s3 网卡设备名称,根据自己实际情况进行改动
# cat /sys/class/net/enp0s3/address
# cat /sys/class/dmi/id/product_uuid

配置master服务器

配置k8s初始化文件

k8s config 命令参考

master节点下 生成默认配置文件

$ kubeadm config print init-defaults > init-kubeadm.conf

修改init-kubeadm.conf 主要参数

#imageRepository: k8s.gcr.io 更换k8s镜像仓库
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
# kubernetesVersion: v1.18.0 修改为版本 v1.18.2
kubernetesVersion: v1.18.2
# localAPIEndpointc,advertiseAddress为master-ip ,port默认不修改
localAPIEndpoint:
advertiseAddress: 192.168.56.101 #此处为master的IP
bindPort: 6443
# 配置子网络
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 #添加pod子网络,使用的是flannel网络

拉取下载k8s组件

#查看安装时需要的镜像文件列表
$ kubeadm config images list --config init-kubeadm.conf 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
#下载,根据配置文件进行镜像下载,如果此处下载比较缓慢可以考虑更换配置文件中的imageRepository参数
$ kubeadm config images pull --config init-kubeadm.conf

初始化k8s

# init
#如果kubeadm init过了,此时需要加个参数来忽略到这些:--ignore-preflight-errors=all
$ kubeadm init --config init-kubeadm.conf # 启动后可以根据提示执行下列命令,并记录john token
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config # 此处要记录下 join语句,如果join token忘记,则需要执行下边命令重新生成
$ kubeadm token create --print-join-command
kubeadm join 192.168.56.101:6443 --token abcdeff.zlo1o2t9i8e53whd --discovery-token-ca-cert-hash sha256:3613c3bc855b5d9e1555b99ebd21f48873d20353aeb8c2c64e73d8c7597d43f9 #--------------------以下为均一些状态查看命令,可以不执行--------------------
# 查看启动状态
[root@master01 kube]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 NotReady master 16m v1.18.2
[root@master01 kube]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
# 查看具体初始化情况
$ kubectl get pods -n kube-system -0 wide
NAME READY STATUS RESTARTS AGE
coredns-546565776c-6kbxw 1/1 Running 2 16h
coredns-546565776c-bmfgz 1/1 Running 2 16h
etcd-master01 1/1 Running 9 16h
kube-apiserver-master01 1/1 Running 9 16h
kube-controller-manager-master01 1/1 Running 9 16h
kube-flannel-ds-amd64-8qphl 1/1 Running 3 14h
kube-flannel-ds-amd64-c8hrq 1/1 Running 3 13h
kube-flannel-ds-amd64-lcmhs 1/1 Running 2 16h
kube-proxy-6wv5w 1/1 Running 3 13h
kube-proxy-f4x2t 1/1 Running 4 16h
kube-proxy-m464b 1/1 Running 13 14h
kube-scheduler-master01 1/1 Running 10 16h
# 查看 kube-flannel-ds-amd64-c8hrq 状态
$ kubectl describe pod kube-flannel-ds-amd64-c8hrq -n kube-system

flannel网络配置

 #下载 配置文件
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#下载
$ kubectl apply -f kube-flannel.yml # 问题解决:
# 此处如果没法下载配置文件kube-flannel.yml,raw.githubusercontent.com访问拒绝
# 通过IPAddress.com 查询真实IP,输入raw.githubusercontent.com查询到真实IP地址(例如:199.232.4.133)
# 添加到hosts中,
$ sudo vi /etc/hosts
199.232.4.133 raw.githubusercontent.com

配置node

node节点 初始化内容

#拷贝 master机器上 $HOME/.kube/config 到node节点上
scp $HOME/.kube/config root@node01:~/
scp $HOME/.kube/config root@node02:~/
#分别在node01和node02上执行下边命令
#不然执行kubectl 会报错
#error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
mkdir -p $HOME/.kube
sudo mv $HOME/config $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

节点注册方法1:直接使用命令节点注册【推荐】

#直接使用指令加入
$ kubeadm join 192.168.56.101:6443 --token abcdeff.zlo1o2t9i8e53whd --discovery-token-ca-cert-hash sha256:3613c3bc855b5d9e1555b99ebd21f48873d20353aeb8c2c64e73d8c7597d43f9
# token加入语句忘记了可以在master上使用下边命令进行生成
$ kubeadm token create --print-join-command

节点注册方法2:使用 join-config.yml 进行节点注册

# node 节点上生成 join-config.yml,并对主要的参数做修改
$ kubeadm config print join-defaults > join-config.yaml # join-config.yaml 内容
apiVersion: kubeadm.k8s.io/v1beta2
caCertPath: /etc/kubernetes/pki/ca.crt
discovery:
bootstrapToken:
apiServerEndpoint: kube-apiserver:6443 # 修改为master机器ip:port,192.168.56.101:6443
token: abcdef.0123456789abcdef # 修改为真实token
unsafeSkipCAVerification: true
timeout: 5m0s
tlsBootstrapToken: abcdef.0123456789abcdef # 修改为真实token
kind: JoinConfiguration
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: node01 # 根据实际节点名进行修改
taints: null #使用配置文件加入
$ kubeadm join --config=join-config.yaml

添加flannel网络

 #下载 配置文件
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#或者拷贝 master机器上的文件
scp root@master01:~/workspace/kube/kube-flannel.yml .
#下载
$ kubectl apply -f kube-flannel.yml # 查看节点添加状况
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready master 16h v1.18.2
node01 Ready <none> 12h v1.18.2
node02 Ready <none> 12h v1.18.2

常见问题

node节点NotReady

# 查看pod 状态
$ kubectl get pods -n kube-system -0 wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-flannel-ds-amd64-gtlwv 1/1 Running 4 4h23m 192.168.56.101 master01 <none> <none>
kube-flannel-ds-amd64-m78z2 0/1 Init:0/1 0 3h13m 192.168.56.103 node02 <none> <none> # Init:0/1 错误,查看详情
$ kubectl describe pod kube-flannel-ds-amd64-m78z2 -n kube-system # 一般都是flannel的docker镜像没有下载成功
# 可以在node2上,执行docker images 查看是否有flannel镜像,如果没有手动下载

node节点删除重新加入

# -----重新加入注册
# 删除指定node
$ kubectl delete node node01
# 删除对应的配置文件以及证书
$ rm -rf /etc/kubernetes/kubelet.conf /etc/kubernetes/pki/ca.crt && systemctl restart docker kubelet
# 重新执行注册语句

节点注册语句

附:

k8s v1.18.2 centos7 下环境搭建的更多相关文章

  1. [Jenkins]CentOS7下Jenkins搭建

    最近在倒腾Kubernetes的一些东西,这次需要用到Jenkins来实现自动化构建.来讲一讲搭建的整个过程. Jenkins是什么 Jenkins提供了软件开发的持续集成服务.它运行在Servlet ...

  2. Redis的简单介绍及在Windows下环境搭建

    简单介绍 1,Redis是什么 最直接的还是看官方的定义吧. Redis is an open source (BSD licensed), in-memory data structure stor ...

  3. Mac OS X下环境搭建 Sublime Text 2 环境变量配置 开发工具配置Golang (Go语言)

    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 一.安装Golang的SDK 在官网http://golang.org/ 直接下载安装 ...

  4. opencv在vc2010 express下环境搭建方法笔记+空白通用工程(已编译测试通过)(提供下载)

    opencv在VC2010 express版本下的环境搭建可以参见下面的wiki,这里面讲的非常清楚. http://wiki.opencv.org.cn/index.php/VC_2010_Expr ...

  5. Linux下环境搭建(四)——jenkins+gitlab+jmeter实践

    经过前三篇博文的介绍,jenkins+gitlab+jmeter接口自动化的框架就搭建成功了,详细可见 Linux下环境搭建(一)——java.tomcat配置 Linux下环境搭建(二)——jenk ...

  6. Centos7 python3环境搭建 兼容python2.7

    Centos7 python3环境搭建 兼容python2.7 安装前提依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel ...

  7. Linux下环境搭建(一)——java、tomcat配置

    通过2个周末小憩的时间,终究是把linux环境下的jenkins+gitlab+jmeter框架给弄好了.jenkins的配置系列文章,可以翻看我以前的博文.此次,就将在linux下搭建环境的过程以博 ...

  8. LNMP小项目搭建,Centos7.6环境搭建Linux+nginx+mysql+php,wordpress个人博客的搭建(完整搭建步骤)

    一.LNMP搭建,基于nginx服务器搭建wordpress个人博客 准备环境:centos7.6环境下web服务器(nginx+php):主机名:web01,ip:192.168.248.172my ...

  9. RocketMQ在Windows平台下环境搭建

    一.  环境搭建 需要jdk1.6(以上) 64bit, maven, eclipse 二.  RocketMQ项目下载 项目地址:https://github.com/alibaba/RocketM ...

随机推荐

  1. Kwp2000协议的应用(程序原理篇)

    作者:良知犹存 转载授权以及围观:欢迎添加微信:becom_me 总述     接上篇文章Kwp2000协议的应用(硬件原理使用篇),本篇针对kwp2000协议标准的服务ID详细介绍,以及针对程序实现 ...

  2. 如何获得svn的版本号信息?

    方法一  popen(可获取命令行执行后的输出结果) 转载自: C++执行命令行指令并获取命令行执行后的输出结果 1 /* 2 Execute command line commands and ge ...

  3. HDU - 4300 Clairewd’s message (拓展kmp)

    HDU - 4300 题意:这个题目好难读懂,,先给你一个字母的转换表,然后给你一个字符串密文+明文,密文一定是全的,但明文不一定是全的,求最短的密文和解密后的明文: 题解:由于密文一定是全的,所以他 ...

  4. 【uva 1610】Party Games(算法效率--构造 dfs)

    题意:有一个N个字符串(N≤1000,N为偶数)的集合,要求找一个长度最短的字符串(可不在集合内)S,使得集合中恰好一半的串小于等于S,另一半大于S.如果有多解,要求输出字典序最小的解. 解法:本来我 ...

  5. 吉哥系列故事――恨7不成妻 HDU - 4507

    题目: 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7=7*2 ...

  6. .Net Core 国际化

    创建项目什么的就不说了吧 直接进入正题吧 我这里建的是个webapi 添加资源文件 1.首先我们创建一个Language文件夹,这就是我们在后面Startup类中需要配置的目录名. 2.然后我们在La ...

  7. SSH服务连接

    SSH基本概述 SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输.确保了数据传输安全. SSH服务 ssh: secure shell, protocol, 22/ ...

  8. MHA 高可用介绍

    目录 MHA 介绍 MHA 简介(Master High Availability) MHA 工作原理(转载) MHA 架构 MHA 工具 Manager 节点 Node 节点 MHA 优点 MHA ...

  9. 833A The Meaningless Game

    A. The Meaningless Game time limit per test 1 second memory limit per test 256 megabytes input stand ...

  10. Bash on Ubuntu on Windows ( Windows Subsystem for Linux)

    1 #  Bash on ubuntu on Windows http://www.cnblogs.com/anonymous-ufo/p/6143480.html 1 1 如何启用Bash on u ...