kubernetes的安装方法
背景
自己学习k8s集群,无奈屌丝一枚,没钱配置vpn服务,安装k8s花费的时间太久了。为了小伙伴们可以快速安装k8s,我花了点时间整理了这篇博客,提供一个不用翻墙就可以愉快安装k8s集群的方法。
主机环境
主机、IP规划和网络规划
HOSTNAME | IP |
master | 10.8.3.91 |
node1 | 10.8.3.81 |
node2 | 10.8.3.82 |
k8s的pod网络采用 10.244.0.0/16 ,网络组件选择flannel,k8s版本选择v1.11.3。
主机名设置
这里使用centos7的hostnamectl设置主机名字, centos其他版本参考: https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_043_hostname.html
#master节点
hostnamectl set-hostname master && exec bash
#node1节点
hostnamectl set-hostname node1 && exec bash
#node2节点
hostnamectl set-hostname node2 && exec bash
hosts文件设置
[root@master ~]# vim /etc/hosts
# 添加如下3行
10.4.3.91 master
10.4.3.81 node1
10.4.3.82 node2
# 其他的2个node节点也需要同样操作
防火墙和selinux设置
[root@master ~]# sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config
[root@master ~]# setenforce
setenforce: SELinux is disabled
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
# 其他的2个node节点也需要同样操作
内核参数开启
[root@master k8s_images]# echo "net.bridge.bridge-nf-call-ip6tables = 1" >>/etc/sysctl.conf
[root@master k8s_images]# echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
[root@master k8s_images]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@master k8s_images]# sysctl -p
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
#加载模块
[root@master k8s_images]# modprobe br_netfilter
[root@master k8s_images]# echo "modprobe br_netfilter" >> /etc/rc.local
#再次重载下
[root@master k8s_images]# sysctl -p
# 其他的2个node节点也需要同样操作
仓库准备
# 备份旧的repo
[root@master ~]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@master yum.repos.d]# mkdir bak
[root@master yum.repos.d]# mv *.repo bak
[root@master yum.repos.d]# ls
bak
# 下载base,epel
[root@master yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@master yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 下载k8s repo
[root@master yum.repos.d]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=
gpgcheck=
repo_gpgcheck=
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 其他的2个node节点也需要同样操作
安装k8s
docker和k8s软件安装
[root@master yum.repos.d]# yum install docker kubelet kubeadm kubectl
[root@master yum.repos.d]# systemctl enable docker && systemctl restart docker
[root@master yum.repos.d]# systemctl enable kubelet && systemctl start kubelet
# 其他的2个node节点也需要同样操作
docker加速配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mew8i5li.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 其他的2个node节点也需要同样操作
曲线下载k8s所需的镜像
这个我是在dockerhub上面的自动构建,原理就是拉去构建的镜像,给这个镜像打tag为k8s.gcr.io的tag,这样我们在初始化集群的时候就不会再去国外拉取镜像文件。
我的dockerhub:https://hub.docker.com/r/zhaojiedi1992
我的github仓库:https://github.com/zhaojiedi1992/k8s_images
[root@master ~]# cd /root
[root@master ~]# mkdir git
[root@master ~]# cd git/
[root@master git]# git clone https://github.com/zhaojiedi1992/k8s_images.git
[root@master git]# cd k8s_images/
[root@master k8s_images]# ls
create_script.sh pull_image_from_dockerhub_v1.10.6.sh README.md v1.10.6
pull_image_from_dockerhub.template pull_image_from_dockerhub_v1.10.7.sh tmp.txt v1.10.7
pull_image_from_dockerhub_v1.10.0.sh pull_image_from_dockerhub_v1.10.8.sh v1.10.0 v1.10.8
pull_image_from_dockerhub_v1.10.1.sh pull_image_from_dockerhub_v1.11.0.sh v1.10.1 v1.
pull_image_from_dockerhub_v1.10.2.sh pull_image_from_dockerhub_v1.11.1.sh v1.10.2 v1.11.0
pull_image_from_dockerhub_v1.10.3.sh pull_image_from_dockerhub_v1.11.2.sh v1.10.3 v1.11.1
pull_image_from_dockerhub_v1.10.4.sh pull_image_from_dockerhub_v1.11.3.sh v1.10.4 v1.11.2
pull_image_from_dockerhub_v1.10.5.sh pull_image_from_dockerhub_v1..sh v1.10.5 v1.11.3
[root@master k8s_images]# chmod a+x *.sh # 查看安装的k8s版本对应需要的镜像
[root@master k8s_images]# kubeadm config images list --kubernetes-version=v1.11.3
k8s.gcr.io/kube-apiserver-amd64:v1.11.3
k8s.gcr.io/kube-controller-manager-amd64:v1.11.3
k8s.gcr.io/kube-scheduler-amd64:v1.11.3
k8s.gcr.io/kube-proxy-amd64:v1.11.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd-amd64:3.2.
k8s.gcr.io/coredns:1.1. # 查看脚本的镜像和需要拉去的是否一致。
[root@master k8s_images]# cat ./pull_image_from_dockerhub_v1.11.3.sh
#!/bin/bash
gcr_name=k8s.gcr.io
myhub_name=zhaojiedi1992
# define images
images=(
kube-apiserver-amd64:v1.11.3
kube-controller-manager-amd64:v1.11.3
kube-scheduler-amd64:v1.11.3
kube-proxy-amd64:v1.11.3
pause:3.1
etcd-amd64:3.2.
coredns:1.1.
)
for image in ${images[@]}; do
docker pull $myhub_name/$image
docker tag $myhub_name/$image $gcr_name/$image
docker rmi $myhub_name/$image
done # 确认上面的无错误,开始下载。
[root@master k8s_images]# ./pull_image_from_dockerhub_v1.11.3.sh
[root@master k8s_images]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/pause 3.1 24440bb35d05 About an hour ago kB
k8s.gcr.io/kube-proxy-amd64 v1.11.3 763b3c45ccd2 hours ago 97.8 MB
k8s.gcr.io/kube-scheduler-amd64 v1.11.3 8434ffab1549 hours ago 56.8 MB
k8s.gcr.io/kube-controller-manager-amd64 v1.11.3 3b0d0349c534 hours ago MB
k8s.gcr.io/kube-apiserver-amd64 v1.11.3 306b76250de9 hours ago MB
k8s.gcr.io/coredns 1.1. 6b777875393d hours ago 45.6 MB
k8s.gcr.io/etcd-amd64 3.2. 7dc1bb5c1af1 hours ago MB
# 其他的2个node节点也需要同样操作
初始化k8s
[root@master k8s_images]# kubeadm init --pod-network-cidr=10.244.0.0/ --kubernetes-version=v1.11.3
省略大量输出
Your Kubernetes master has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node
as root: kubeadm join 10.4.3.91:6443 --token 1ccx3e.jwbm8pbaq1awiz2z --discovery-token-ca-cert-hash sha256:838517f2d09d04d8ab1d736466311e32db26d2c5a9286fec37204b2de7923a67
客户端设置
这里kubectl客户端的配置设置,我们直接设置到主节点上面来。
[root@master k8s_images]# mkdir -p $HOME/.kube
[root@master k8s_images]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
cp: overwrite ‘/root/.kube/config’? y
[root@master k8s_images]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@master k8s_images]# echo " kubeadm join 10.4.3.91:6443 --token 1ccx3e.jwbm8pbaq1awiz2z --discovery-token-ca-cert-hash sha256:838517f2d09d04d8ab1d736466311e32db26d2c5a9286fec37204b2de7923a67" >/root/k8s.json
安装flannel网络组件
[root@master k8s_images]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
node1加入集群
[root@node1 k8s_images]# kubeadm join 10.4.3.91: --token 1ccx3e.jwbm8pbaq1awiz2z --discovery-token-ca-cert-hash sha256:838517f2d09d04d8ab1d736466311e32db26d2c5a9286fec37204b2de7923a67
这个命令来自与主节点初始化的时候的输出,上面已经保存到主节点的/root/k8s.json。
查看集群状态
[root@master k8s_images]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 17m v1.11.3
node1 Ready <none> 8m v1.11.3
[root@master k8s_images]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-78fcdf6894-5zr25 / Running 17m
coredns-78fcdf6894-82v6w / Running 17m
etcd-master / Running 7m
kube-apiserver-master / Running 7m
kube-controller-manager-master / Running 7m
kube-flannel-ds-amd64-5s962 / Running 4m
kube-flannel-ds-amd64-s2t5b / Running 4m
kube-proxy-ccvdd / Running 17m
kube-proxy-p2fbl / Running 8m
kube-scheduler-master / Running 7m
这个状态需要等一段时间才能全是Running。好了,k8s集群就安装完毕了。
更多k8s.io的镜像可以从https://hub.docker.com/u/anjia0532/这个地方找找。
kubernetes的安装方法的更多相关文章
- Kubernetes 及安装注意事项
Docker Desktop for Mac/Windows开启Kubernetes 及安装注意事项 Table of Contents 1 解决方案 2 注意事项 2.1 Choose Kubeco ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- CocoaPods 的简单快速安装方法
CocoaPods 的简单快速安装方法(Setting up CocoaPods master repo 卡着不动,是因为淘宝镜像已经不能用了. 一.git clone方法安装cocoapods 镜像 ...
- windows下安装easy_install, pip 及whl文件安装方法
转:http://www.cnblogs.com/wu-wenmin/p/4250330.html 写在前面的话 最近在看"Computer Vision with Python" ...
- Laravel安装方法 (windows)
Laravel安装方法(windows) 安装PHP 下载PHP7 http://windows.php.net/download#php-7.0 进入上述网站下载PHP7 选择zip包解压安装 配置 ...
- win8.1系统的安装方法详细图解教程
win8.1系统的安装方法详细图解教程 关于win8.1系统的安装其实很简单 但是有的童鞋还不回 所以今天就抽空做了个详细的图解教程, 安装win8.1系统最好用U盘安装,这样最方便简单 而且系统安装 ...
- ubuntu一些基本软件安装方法
ubuntu一些基本软件安装方法 首先说明一下 ubuntu 的软件安装大概有几种方式:1. deb 包的安装方式deb 是 debian 系 Linux 的包管理方式, ubuntu 是属于 deb ...
- Ehlib安装方法有窍门
Ehlib安装方法有窍门,如果不知道该安装方法,很难成功安装,Delphi 7(D5.D6也如此)中的安装方法 1.把EhLib中的common和DataService文件拷贝到Delph ...
- Ubuntu .deb包安装方法
使用apt-get方法安装的软件,所有下载的deb包都缓存到了/var/cache/apt/archives目录下了,所以可以把常用的deb包备份出来,甚至做成ISO工具包.刻盘,以后安装Ubuntu ...
随机推荐
- 意识科学初步:David Chalmers的简单问题与困难问题
这是第一篇关于意识科学的内容.主要谈一下阅读大卫查莫斯的几篇论文的一些观点和思考. 论文作者简介(摘自wiki): David John Chalmers (born 20 April 1966) i ...
- 无法在Application Designer中打开PeopleTools对象
PeopleSoft开发人员经常使用PeopleSoft Application Designer来查看/修改PeopleTools对象,例如字段,记录,页面,组件等.开发人员对Application ...
- LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++>
LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++> 给出排序好的一维数组,如果一个元素重复出现的次数 ...
- js的七大设计原则--迪米特原则
一.什么是迪米特原则 迪米特原则也叫最少知道原则,一个类应该对其他对象保持最少的了解.通俗来讲,就是一个类对自己依赖的类知道的越少越好.因为类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另 ...
- Centos 搭建邮箱系统
总结 我实操的过程,2个邮箱都没有界面,都只是邮件系统.可能还需要再部署其他东西,暂止. sendmail 比较简单,主要是发邮件,使用 stmp.还需要解决收邮件的问题和管理界面的问题. postf ...
- mysql根据查询结果批量更新多条数据(插入或更新)
mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...
- Windows10获取VS管理员权限总是很烦人
之前在Windows 7中,只要关闭了UAC,给当前账户管理员权限,任何程序都会以管理员身份启动.现在,在Windows 10上就行不通了.而VS又需要管理员权限才能使用附加调试等一些功能.虽然我们可 ...
- Spark入门PPT分享
本篇PPT是我在公司内部进行Spark入门的分享,内容包含了Spark基本概念.原理.Streaming.SparkSQL等内容,现在分享出来. 下载请点击这里
- 【Nim游戏】高僧斗法
先来看看Nim定理: // 若干堆硬币,二人轮流取,从一堆硬币中取几个 直到某个人不能取硬币 那这个人就输了 // 3 4 5 // 3 3 把硬币变成相同的 那么你就赢了 因为你可以跟着另一个人一样 ...
- 最小可用id
题目:在非负数组(乱序)中找到最小的可分配的id(从1开始编号),数据量10000000. 题目解读:在一个不重复的乱序的自然数组中找到最小的缺失的那个数,比如1,2,3,6,4,5,8,11.那么最 ...