环境准备

为了演示简单,准备两台4GB内存,20GB硬盘的虚拟机,操作系统为ubuntu18.04-server

角色 IP HostName
Master 192.168.47.144 master-k8s
Node 192.168.47.145 node1-k8s

前置准备

前置准备部分在master和node1都要分别执行:

  1. 换源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
# 阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
sudo apt update && sudo apt upgrade
  1. 配置静态IP

设置root用户密码,并使用root用户登录

sudo passwd root
su root

分别配置master和node1的静态ip:

vim /etc/netplan/00-installer-config.yaml
# master-k8s
network:ethernets:ens33:addresses: [192.168.47.144/24]dhcp4: falsegateway4: 192.168.47.2nameservers:addresses: [192.168.47.2]optional: trueversion: 2
# node1-k8s
network:ethernets:ens33:addresses: [192.168.47.145/24]dhcp4: falsegateway4: 192.168.47.2nameservers:addresses: [192.168.47.2]optional: trueversion: 2

应用刚才的修改

netplan apply
  1. 修改hostname和host
vim /etc/hostname
 vim /etc/hosts

添加以下两行(根据自己的ip和hostname修改)

192.168.47.144 master-k8s
192.168.47.145 node1-k8s

重启机器使改动生效

  1. 测试下两台虚拟机是否互通,是否能连网
cws@master-k8s:~$ ping 192.168.47.145
PING 192.168.47.145 (192.168.47.145) 56(84) bytes of data.
64 bytes from 192.168.47.145: icmp_seq=1 ttl=64 time=0.459 ms
64 bytes from 192.168.47.145: icmp_seq=2 ttl=64 time=0.355 ms
64 bytes from 192.168.47.145: icmp_seq=3 ttl=64 time=1.76 ms
64 bytes from 192.168.47.145: icmp_seq=4 ttl=64 time=0.346 ms
64 bytes from 192.168.47.145: icmp_seq=5 ttl=64 time=0.375 ms
^C
--- 192.168.47.145 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4070ms
rtt min/avg/max/mdev = 0.346/0.659/1.760/0.551 ms
cws@master-k8s:~$ ping www.baidu.com
PING www.a.shifen.com (163.177.151.110) 56(84) bytes of data.
64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=1 ttl=128 time=7.83 ms
64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=2 ttl=128 time=8.11 ms
64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=3 ttl=128 time=7.75 ms
64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=4 ttl=128 time=8.01 ms
64 bytes from 163.177.151.110 (163.177.151.110): icmp_seq=5 ttl=128 time=7.80 ms
^C
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 7.759/7.904/8.111/0.145 ms
  1. 禁止交换分区
vim /etc/fstab

注释掉最后一行

安装docker

安装docker也要分别在master和node1分别执行

> curl -fsSL https://get.docker.com | sudo sh -s -- --mirror Aliyun
> sudo usermod -aG docker $USER
> sudo mkdir -p /etc/docker
> sudo tee /etc/docker/daemon.json <<-'EOF'{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2","registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]}EOF
> sudo systemctl daemon-reload
> sudo systemctl restart docker

检查docker是否安装成功

cws@master-k8s:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:31b9c7d48790f0d8c50ab433d9c3b7e17666d6993084c002c2ff1ca09b96391d
Status: Downloaded newer image for hello-world:latestHello 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/

安装k8s

  1. 安装k8s组件(分别在master和node1执行)
# 添加并信任APT证书
> curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -# 添加源地址
> sudo add-apt-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"# 更新源并安装(可以改成自己需要的版本)
> sudo apt update && sudo apt install -y kubeadm=1.19.3-00 kubectl=1.19.3-00 kubelet=1.19.3-00# 添加 completion
> source <(kubectl completion bash)
> source <(kubeadm completion bash)
  1. Master 节点启动
    这一步在master执行,注意修改成自己的ip
sudo kubeadm init --apiserver-advertise-address 192.168.47.144 \--pod-network-cidr=10.244.0.0/16  \--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
> sudo mkdir -p $HOME/.kube
> sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
> sudo chown $(id -u):$(id -g) $HOME/.kube/config

记录输出的橙色框中内容,待会会用到

  1. 安装网络插件(Flannel 插件)
    在master执行
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 这里这个网址被墙了,需要下载kube-flannel.yml到本地,或者找一个能访问的地址来替换
# 我找到一个gitee上的可自行尝试:
kubectl apply -f https://gitee.com/lm_py/kube-flannel.yaml/raw/master/kube-flannel.yml
  1. 将node节点加入集群
    在node1,执行前面我们记录下的代码,这里要用root登录
kubeadm join 192.168.47.144:6443 --token napprp.yj4u91sk5n1fq9ya \
>     --discovery-token-ca-cert-hash sha256:4706f26a51a2303a2c79ea8137206d250450994bec9861ee3981cf934ae1ff89
  1. 在master上 检查一下是否成功
cws@master-k8s:~$ kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
master-k8s   Ready    master   14m   v1.19.3
node1-k8s    Ready    <none>   96s   v1.19.3cws@master-k8s:~$ kubectl get pods -n kube-system
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-6c76c8bb89-l8pz9             1/1     Running   0          17m
coredns-6c76c8bb89-mv2lz             1/1     Running   0          17m
etcd-master-k8s                      1/1     Running   0          17m
kube-apiserver-master-k8s            1/1     Running   0          17m
kube-controller-manager-master-k8s   1/1     Running   0          17m
kube-flannel-ds-tzn5b                1/1     Running   0          11m
kube-flannel-ds-x8n2w                1/1     Running   0          4m18s
kube-proxy-8dwtc                     1/1     Running   0          17m
kube-proxy-vz5jx                     1/1     Running   0          4m18s
kube-scheduler-master-k8s            1/1     Running   0          17mcws@master-k8s:~$ kubectl get pods -A
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-6c76c8bb89-l8pz9             1/1     Running   0          93m
kube-system   coredns-6c76c8bb89-mv2lz             1/1     Running   0          93m
kube-system   etcd-master-k8s                      1/1     Running   0          93m
kube-system   kube-apiserver-master-k8s            1/1     Running   0          93m
kube-system   kube-controller-manager-master-k8s   1/1     Running   0          93m
kube-system   kube-flannel-ds-tzn5b                1/1     Running   0          86m
kube-system   kube-flannel-ds-x8n2w                1/1     Running   0          80m
kube-system   kube-proxy-8dwtc                     1/1     Running   0          93m
kube-system   kube-proxy-vz5jx                     1/1     Running   0          80m
kube-system   kube-scheduler-master-k8s            1/1     Running   0          93m

到这里集群就搭建成功了

测试集群

在Kubernetes集群中创建一个pod,验证是否正常运行:
在master执行

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


片刻后,可以看到输出了端口号
访问地址:http://NodeIP:Port,(我的是192.168.47.145:31984)
可以看到nginx的欢迎页面,说明成功

在Ubuntu18上搭建K8s集群(1.19.3)相关推荐

  1. 搭建K8s集群(kubeadm方式)-操作系统初始化

    使用kubeadm方式搭建K8S集群 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Ma ...

  2. kubernetes(一)kubeadm搭建k8s集群

    使用kubeadm搭建一个k8s集群 1个MasterNode,2个WorkNode 步骤 1.准备3台centos机器 可以使用阿里云,也可以使用virtualbox或者vm MasterNode: ...

  3. centos8搭建k8s集群

    1. 系统初始化 关闭防火墙 systemctl disable firewalld 关闭swap sed -ri 's/.*swap.*/#&/' /etc/fstab 关闭selinux ...

  4. 纯手工搭建k8s集群-(二)核心模块部署

    1. 部署ETCD(主节点) 1.1 简介 kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运行的pod,deployment,service等等.都需 ...

  5. 从零开始搭建K8S集群(二)-- 搭建K8S集群

    一.下面我们开始搭建K8S集群 配置K8S的yum源(自v1.6.0起,Kubernetes默认启用了CRI,Container Runtime Interface,详情请查看官网:https://k ...

  6. 搭建k8s集群完整流程,云服务器、虚拟机均可参考

    一.机器准备 本次搭建k8s集群采用三台云服务器,master节点最好采用2核2G以上的机器,node节点不作要求 二.开始搭建 1.机器 | 角色     | IP           | | -- ...

  7. 【云原生之k8s】kubeadm搭建k8s集群

    [云原生之k8s]kubeadm搭建k8s集群 前言 一.集群介绍 (1)集群搭建方法 (2)集群架构 二.集群部署 (1)环境部署 ①所有节点,关闭防火墙规则,关闭selinux,关闭swap交换 ...

  8. Linux云计算虚拟化-使用rancher搭建k8s集群并发布电商网站

    文章目录 Linux云计算虚拟化-使用Rancher搭建k8s集群并使用lnmp架构发布电商网站 1. Rancher介绍 2. 使用Rancher搭建k8s集群 2.1 实验环境介绍 2.2 在ra ...

  9. centos7中kubeadm方式搭建k8s集群(crio+calico)(k8s v1.21.0)

    文章目录 centos7中kubeadm方式搭建k8s集群(crio+calico)(k8s v1.21.0) 环境说明 注意事项及说明 1.版本兼容问题 2.镜像问题 安装步骤 安装要求 准备环境 ...

最新文章

  1. 熬夜与不熬夜,10年后差距到底有多大?惊了!
  2. SAP PM 初级系列1 – 定义维护工厂和维护计划工厂
  3. vba获取通达信光标的坐标数据_「高阶应用」谈一下VB6和VBA的坐标系统
  4. 磁盘及文件系统管理(三)
  5. 离散数学及其应用第6版中文版勘误
  6. IE9正式版已完成 截图曝光
  7. 《系统集成项目管理工程师》必背100个知识点-96我国企业信息化发展的战略要点...
  8. 的原型是什么_学习服装原型是什么?
  9. Apache Ant 的安装
  10. java 类.class_面试官:Java反射是什么?我回答不上来!
  11. c command语言学例子,乔姆斯基语言学理论发展史研究
  12. Java拷贝(赋值、浅拷贝、深拷贝)
  13. 阿里影业出品影片《1917》斩获奥斯卡多项大奖 有望国内院线上映
  14. 银行系统开发 经验谈
  15. 自然语言处理技术之准确率(Precision)、召回率(Recall)、F值(F-Measure)简介
  16. 语聊房玩法解析,如何快速打造一款语音社交产品
  17. 从石器时代到硅器时代
  18. 第六章 类与对象 类的包含
  19. わたしたちの田村くん
  20. 修改linux系统的root用户密码,linux系统下修改root用户密码

热门文章

  1. MyBatis 源码解读-databaseIdProviderElement()
  2. 自定义线程池-线程池工作流程介绍
  3. 共享锁和排它锁的用法
  4. 静态工厂配置bean
  5. 登陆状态下加入购物车
  6. linux zip 开源工程,7-Zip 18.06 发布,开源数据压缩程序
  7. Python中操作mysql知识(一)
  8. 每日一shell(八)nginx日志切割
  9. 从MySQL随机选取数据
  10. 即将到来的 Android N 将具备这些新特性