环境 : CentOS7

master    192.168.94.11 

node1  192.168.94.22

node2  192.168.94.33

关闭防火墙、SElinux

安装包地址 : 链接: https://pan.baidu.com/s/1_Jjpfhly5fvA6ICf4zrYCQ 提取码: gaic

所有节点做以下操作

将安装包上传到每个节点

[root@master ~]# unzip k8s-offline-install.zip
[root@master ~]# cd k8s-images  
# 安装docker
[root@master k8s-images]# yum -y localinstall docker-ce*
# 修改docker的镜像仓库源或者使用阿里云docker仓库的加速
[root@master k8s-images]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://a58c8480.m.daocloud.io
# 启动docker并设置开启启动
[root@master k8s-images]# systemctl start docker
[root@master k8s-images]# systemctl enable docker

配置系统路由参数,防止kubeadm报路由警告

[root@master k8s-images]# cat <<EOF > /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master k8s-images]# sysctl --system
* Applying /usr/lib/sysctl.d/-system.conf ...
net.bridge.bridge-nf-call-ip6tables =
net.bridge.bridge-nf-call-iptables =
net.bridge.bridge-nf-call-arptables =
* Applying /usr/lib/sysctl.d/-default-yama-scope.conf ...
kernel.yama.ptrace_scope =
* Applying /usr/lib/sysctl.d/-default.conf ...
kernel.sysrq =
kernel.core_uses_pid =
net.ipv4.conf.default.rp_filter =
net.ipv4.conf.all.rp_filter =
net.ipv4.conf.default.accept_source_route =
net.ipv4.conf.all.accept_source_route =
net.ipv4.conf.default.promote_secondaries =
net.ipv4.conf.all.promote_secondaries =
fs.protected_hardlinks =
fs.protected_symlinks =
* Applying /etc/sysctl.d/-sysctl.conf ...
* Applying /etc/sysctl.d/k8s.conf ...
net.bridge.bridge-nf-call-ip6tables =
net.bridge.bridge-nf-call-iptables =
* Applying /etc/sysctl.conf ...

关闭swap

[root@master k8s-images]# swapoff -a
# 注释掉swap的行
[root@master k8s-images]# sed -i 's/.*swap/#&/' /etc/fstab

导入镜像

# 解压docker镜像
[root@master k8s-images]# unzip docker_images.zip
# 如果解压失败的话, 使用zip命令来修复压缩包
# 例: zip -F(或者-FF) file_old.zip --out file_new.zip , 之后尝试重新解压
# 导入镜像
docker load < /root/k8s-images/docker_images/etcd-amd64_v3.1.10.tardocker load </root/k8s-images/docker_images/flannel_v0.9.1-amd64.tar
docker load </root/k8s-images/docker_images/k8s-dns-dnsmasq-nanny-amd64_v1.14.7.tar
docker load </root/k8s-images/docker_images/k8s-dns-kube-dns-amd64_1.14.7.tar
docker load </root/k8s-images/docker_images/k8s-dns-sidecar-amd64_1.14.7.tar
docker load </root/k8s-images/docker_images/kube-apiserver-amd64_v1.9.0.tar
docker load </root/k8s-images/docker_images/kube-controller-manager-amd64_v1.9.0.tar
docker load </root/k8s-images/docker_images/kube-scheduler-amd64_v1.9.0.tar
docker load < /root/k8s-images/docker_images/kube-proxy-amd64_v1.9.0.tar
docker load </root/k8s-images/docker_images/pause-amd64_3..tar
docker load < /root/k8s-images/docker_images/kubernetes-dashboard_v1.8.1.tar

安装kubelet kubeadm kubectl包

[root@master k8s-images]# yum -y localinstall  socat-1.7.3.2-.el7.x86_64.rpm kubernetes-cni-0.6.-.x86_64.rpm  kubelet-1.9.-.x86_64.rpm kubectl-1.9.-.x86_64.rpm kubectl-1.9.-.x86_64.rpm kubeadm-1.9.-.x86_64.rpm
[root@master k8s-images]# systemctl enable kubelet

master与node做ssh互信

[root@master k8s-images]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" -q
[root@master k8s-images]# ssh-copy-id node1
[root@master k8s-images]# ssh-copy-id node2

kubelet默认的cgroup的driver和docker的不一样,docker默认的cgroupfs,kubelet默认为systemd

[root@master k8s-images]# cp -a  /etc/systemd/system/kubelet.service.d/-kubeadm.conf /etc/systemd/system/kubelet.service.d/-kubeadm.conf_bak
[root@master k8s-images]# sed -i "s/systemd/cgroupfs/g" /etc/systemd/system/kubelet.service.d/-kubeadm.conf

重新加载system配置文件

[root@master k8s-images]# systemctl daemon-reload
# 将环境reset
[root@master k8s-images]# kubeadm reset
# master初始化配置
[root@master k8s-images]# kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16
kubeadm join --token b209aa.249f0b51592e58bb 192.168.94.11:6443 --discovery-token-ca-cert-hash sha256:b3537b3ecf6e7febd8fec7b4a635c740a0bd52fe2fb1606b026a938d52fa9e60
# 将kubeadm join --token ...... 保存下来,等下node节点需要使用 ,可以在master上通过 kubeadmin token list 命令来得到

配置环境变量

[root@master k8s-images]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@master k8s-images]# . ~/.bash_profile
# 测试
[root@master k8s-images]# kubectl version

安装网络,可以使用flannel、calico、weave、macvlan这里我们用flannel

[root@master k8s-images]# kubectl create  -f kube-flannel.yml
# 安装dashboard
[root@master k8s-images]# kubectl apply -f kubernetes-dashboard.yaml
# 查看部署状态是否正常
[root@master k8s-images]# kubectl get pods --all-namespaces

node节点操作:

kubeadm init 输出的 join 指令中 token 只有 24h 的有效期,如果过期后,可以使用 kubeadm token create --print-join-command 命令重新生成
# 使用刚才master的
[root@node1 k8s-images]# kubeadm join --token b209aa.249f0b51592e58bb 192.168.94.11: --discovery-token-ca-cert-hash sha256:b3537b3ecf6e7febd8fec7b4a635c740a0bd52fe2fb1606b026a938d52fa9e60 --namespace=kube-systemc

master节点验证:

[root@master k8s-images]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 1h v1.9.0
node1 Ready <none> 58m v1.9.0
node2 Ready <none> 58m v1.9.0

测试集群

[root@master k8s-images]# kubectl run httpd-app --image=httpd --replicas=
[root@master k8s-images]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
httpd-app 58m
# 检查pod,pod分别在node1和node2上
[root@master k8s-images]# kubectl get pods
NAME READY STATUS RESTARTS AGE
httpd-app-5fbccd7c6c-b4pzp / Running 58m
httpd-app-5fbccd7c6c-pjmx2 / Running 58m
[root@master k8s-images]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
httpd-app-5fbccd7c6c-b4pzp / Running 59m 10.244.1.2 node1
httpd-app-5fbccd7c6c-pjmx2 / Running 59m 10.244.2.2 node2
# 因为创建的资源不是service,所以不会调用proxy
# 直接访问测试
[root@master k8s-images]# curl 10.244.1.2
<html><body><h1>It works!</h1></body></html>
[root@master k8s-images]# curl 10.244.2.2
<html><body><h1>It works!</h1></body></html>

创建用户

# 创建服务账号 ,并放在kube-system名称空间下
[root@master k8s-images]# kubectl create -f admin-user.yaml
# 默认情况下,kubeadm创建集群时已经创建了admin角色,我们直接绑定即可
[root@master k8s-images]# kubectl create -f admin-user-role-binding.yaml
# 现在需要新创建的用户的Token,以便用来登录dashboard
[root@master k8s-images]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
# 会输出以下内容
Name: admin-user-token-j46b8
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=admin-user
kubernetes.io/service-account.uid=0915f27c-d0a2-11e8-bf22-000c29b353bc Type: kubernetes.io/service-account-token Data
====
ca.crt: bytes
namespace: bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWo0NmI4Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwOTE1ZjI3Yy1kMGEyLTExZTgtYmYyMi0wMDBjMjliMzUzYmMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.dpKrpQPNeixzyFOBRGOaCAnLzORoM300FRfXa0bZEByTEUz5o7Ti9oKVGNOaNOIqsDXJ_HU16DWbkYR58Dnu6UaIy_Ya1_Ro5zRFHPUUkc1PSfCJxIMOxRas4irKy8pL9QMY6evQCtQDKzrVF7xNmUIyxCKtm9d7h7RKxL7xADODz7Sr7HgPOaMtu6MyxHT1EjoXwlXbl4WylTquuMfj1EjXBU1E_6ScUtkJ2yX_MkTNshAWbpFufUW4cTgQ1GumabXPhTmnr4r1HDRXVbJNDd_gGnj_2GwM72YEee-W-iq1dJtDTrbwGgG3mbkiJdkze22F-Ec_twGjfuYuR04Rmw

访问kubernetes-dashboard

使用Firefox浏览器访问 https://master_ip:32666

把刚才获取到的token输入进去

登录效果

集成Heapster 

Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS
Heapster支持多种储存方式,本示例中使用influxdb,直接执行下列命令即可:

[root@master k8s-images]# mkdir heapster
[root@master k8s-images]# cd heapster/
[root@master heapster]# wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yaml
[root@master heapster]# wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml
[root@master heapster]# wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml
[root@master heapster]# wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml

修改yaml 中 image 的值 把k8s.gcr.io 全部修改为 registry.cn-hangzhou.aliyuncs.com/google_containers

部署 Heapster

[root@master heapster]# cd ..
[root@master k8s-images]# kubectl create -f heapster/
# 查看状态,都是running之后就可以了
[root@master heapster]# kubectl get pods --namespace=kube-system

刷新浏览器,查看效果

重新获取token

[root@master heapster]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

多了CPU和内存信息

 

CentOS 7 本地安装kubernetes的更多相关文章

  1. Centos 使用kubeadm安装Kubernetes 1.15.3

    本来没打算搞这个文章的,第一里面有瑕疵(没搞定的地方),第二在我的Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装 也有安装,第三 和社区的问文章比较雷同 https:// ...

  2. 虚拟机中安装 centOS,本地安装 SSH 连接 - 01

    下面把自己安装 centOS 的过程记录下,选取的版本是 centOS6.8 ,下载地址在脚本之家 down 的 : 阿里云 x64 http://mirrors.aliyun.com/centos/ ...

  3. 虚拟机中安装 centOS,本地安装 SSH 连接 - 02

    先进入 centOS 中,查询虚拟机的 IP 地址: 双击打开 SSH 可视化客户端: 点击 Connect 需要输入之前那个[无论如何都要使用]的密码. 密码在[centOS - 01]里面设置过, ...

  4. kubeadm 安装Kubernetes 1.16.3 (CentOS7+IPVS+Calico)

    目录 ·  . 一.更新系统内核(全部节点) ·  . 二.基础环境设置(全部节点) ·  . 1.修改 Host ·  . 2.修改 Hostname ·  . 3.主机时间同步 ·  . 4.关闭 ...

  5. CentOS 7.6 使用kubeadm安装Kubernetes 13

    实验环境:VMware Fusion 11.0.2 操作系统:CentOS 7.6 主机名 IP地址 CPU 内存 k8s2m 172.16.183.151 2核 4G k8s2n 172.16.18 ...

  6. 【k8s】centos上安装kubernetes,报错Error:docker-ce-cli conflicts with 2:docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64

    使用命令: yum install kubernetes 报错: Error: docker-ce-cli conflicts with :docker--.git07f3374.el7.centos ...

  7. CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)

    一.安装方式介绍 1.yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面,使用 yum 安装,好处是简单,坏处也很明显,需要官方更新 yum 源才能 ...

  8. 在CentOS 7.6 以 kubeadm 安装 Kubernetes 1.15 最佳实践

    前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernetes由于"scientifically上网"问题举步维艰,本文以实战经 ...

  9. Centos7 二进制安装 Kubernetes 1.13

    目录 1.目录 1.1.什么是 Kubernetes? 1.2.Kubernetes 有哪些优势? 2.环境准备 2.1.网络配置 2.2.更改 HOSTNAME 2.3.配置ssh免密码登录登录 2 ...

随机推荐

  1. 安装Visual C++ 6.0后报错:应用程序无法正常启动(0xc0000142)

    最近在安装Visual C++ 6.0时,本来想用个中文版的,结果刚安装好就报了这个错误 百度后发现是由于汉化后的Visual C++ 6.0与win10不兼容造成的 解决办法就是替换程序,把中文版的 ...

  2. 使用 Java 将多个文件压缩成一个压缩文件

    使用 Java 将多个文件压缩成一个压缩文件 一.内容 ①使用 Java 将多个文件打包压缩成一个压缩文件: ②主要使用 java.io 下的类 二.源代码:ZipMultiFile.java pac ...

  3. Linux命令行参数前加--,-和不加杠

    参数前“-”的表明后面的参数是字符形式. 参数前“--”的则表明后面的参数是单词形式. 参数前有横的是System V风格. 参数前没有横的是BSD风格. 

  4. virtualbmc 使用

    virtualbmc 介绍 通常情况下,我们要使用 IPMI必须使用有带外管理功能的物理机.但是在很多测试环境,我们使用的是虚拟机.virtualbmc是一个可以使用 IPMI命令来控制虚机的open ...

  5. Sting、StringBuffer、StringBuilder

    (1)String是字符串常量,一旦创建之后不可更改:StringBuffer和StringBuilder是字符串变量,可以更改.String的不可变,所以适合作为Map的键. (2)StringBu ...

  6. iview menu组件手动收起与展开

    本文主要介绍menu组件在有子菜单时如何手动的展开与收起. 展开: 在需要展开的地方先设置openname变量如this.openname = ["设置"]; 再在$nextTic ...

  7. Vue----常见面试题

    1. 谈谈你对MVVM开发模式的理解 MVVM分为Model.View.ViewModel三者. Model 代表数据模型,数据和业务逻辑都在Model层中定义: View 代表UI视图,负责数据的展 ...

  8. C# 复选框显示多项选择

    private void Form1_Load(object sender, EventArgs e) { checkedListBox1.Items.Add("语文"); che ...

  9. COMP9021 PRINCIPLES OF PROGRAMMING

    QUIZ 7COMP9021 PRINCIPLES OF PROGRAMMING$ python3 quiz_7.pyEnter four integers: 0 2 2 8Here is the g ...

  10. Pycharm 自定义文件模板

    Pycharm 自定义文件模板 每次新建文件都有相同的代码框架,每次重复敲浪费了程序员的寿命啊 按照下面方式自定义自己的模板: