一,kubernetes安装的准备工作:

1,准备工作的各步骤请参见:
 
2,  master节点默认不承担node角色的工作,
     我们这里为了在单机上做测试,允许master节点也运行pod
     ip:192.168.219.130
     hostname:kubemaster,
     hostname和ip的对应也加入到了/etc/hosts
 

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

 

二,在kubemaster这台server上安装kubernetes的kubelet/kubectl/kubeadm

1,新建kubernetes的repo
[root@kubemaster ~]# vi /etc/yum.repos.d/kubernetes.repo
内容:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2,安装kube三大件:(当前版本均为:1.18.3)
说明:三大件的作用:
kubelet:是systemd管理的一个daemon,负责启动pod和容器,
它是k8s中唯一在宿主机中启动的后台进程; kubeadm: 负责安装初始化集群,部署完成之后不会再使用 kubectl: k8s的命令行工具,是管理k8s使用的主要工具
用于管理pod/service
安装:
[root@kubemaster ~]# dnf install kubectl kubelet kubeadm
说明:如果提示是否确定导入 GPG 公钥,
输入y后回车即可 
 
3,查看安装后的效果:查看版本:
[root@kubemaster ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40",
GitTreeState:"clean", BuildDate:"2020-05-20T12:52:00Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[root@kubemaster ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40",
GitTreeState:"clean", BuildDate:"2020-05-20T12:49:29Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
[root@kubemaster ~]# kubelet --version
Kubernetes v1.18.3
4,把kubelet配置为自启动
[root@centos8 ~]# systemctl enable kubelet.service
Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /usr/lib/systemd/system/kubelet.service.
[root@kubemaster ~]# systemctl is-enabled kubelet.service
enabled

三,kubeadm 初始化kubenetes

1,执行初始化:
#--apiserver-advertise-address:   apiserver的地址:使用本机的ip
#--image-repository:kubeadm 默认从官网k8s.grc.io下载所需镜像,需要翻墙才能访问,所以用–image-repository指定阿里云镜像仓库地址
[root@kubemaster ~]# kubeadm init --kubernetes-version=1.18.3 --apiserver-advertise-address=192.168.219.130 \
--image-repository registry.aliyuncs.com/google_containers
说明:此过程要下需下载kubenetes所需容器的镜像,
           速度稍慢,需要等待
         如果另开一个终端执行ps,可以看到的它的子进程正在执行docker pull
[root@kubemaster ~]# ps auxfww
...
root 1530 0.0 0.2 152904 10540 ? Ss 13:41 0:00 \_ sshd: root [priv]
root 1666 0.0 0.1 152904 5392 ? S 13:41 0:00 | \_ sshd: root@pts/0
root 1673 0.0 0.1 25588 3980 pts/0 Ss 13:41 0:00 | \_ -bash
root 8076 0.0 0.8 142068 32836 pts/0 Sl+ 14:22 0:00 | \_ kubeadm init --kubernetes-version=1.18.3 --apiserver-advertise-address=192.168.219.130 --image-repository registry.aliyuncs.com/google_containers
root 8450 0.3 1.6 711476 63136 pts/0 Sl+ 14:24 0:00 | \_ docker pull registry.aliyuncs.com/google_containers/etcd:3.4.3-0
init输出内容中需要注意的地方:
生成配置文件
Your Kubernetes control-plane 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/
添加worker node到集群
Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.219.130:6443 --token up139x.98qlng4m7qk61p0z \
--discovery-token-ca-cert-hash sha256:c718e29ccb1883715489a3fdf53dd810a7764ad038c50fd62a2246344a4d9a73
2,查看init操作下载的images
[root@kubemaster ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.aliyuncs.com/google_containers/kube-proxy v1.18.3 3439b7546f29 3 weeks ago 117MB
registry.aliyuncs.com/google_containers/kube-apiserver v1.18.3 7e28efa976bd 3 weeks ago 173MB
registry.aliyuncs.com/google_containers/kube-controller-manager v1.18.3 da26705ccb4b 3 weeks ago 162MB
registry.aliyuncs.com/google_containers/kube-scheduler v1.18.3 76216c34ed0c 3 weeks ago 95.3MB
registry.aliyuncs.com/google_containers/pause 3.2 80d28bedfe5d 4 months ago 683kB
registry.aliyuncs.com/google_containers/coredns 1.6.7 67da37a9a360 4 months ago 43.8MB
registry.aliyuncs.com/google_containers/etcd 3.4.3-0 303ce5db0e90 7 months ago 288MB
3,添加kubectl的默认配置
注意:这些就是 kubeadm init的提示命令
按命令执行一遍即可:
生成.kube这个隐藏目录
[root@kubemaster ~]# mkdir -p $HOME/.kube
把admin.conf复制为config文件
[root@kubemaster ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
配置config文件的所有者
[root@kubemaster ~]# chown $(id -u):$(id -g) $HOME/.kube/config
查看效果
[root@kubemaster ~]# ll .kube/config
-rw------- 1 root root 5451 6月 16 18:25 .kube/config

四,安装网络插件

1,查看node/pod
查看node
[root@kubemaster ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
kubemaster NotReady master 5m39s v1.18.3
查看pod
[root@kubemaster ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7ff77c879f-ttnr9 0/1 Pending 0 6m41s
kube-system coredns-7ff77c879f-x5vps 0/1 Pending 0 6m41s
kube-system etcd-kubemaster 1/1 Running 0 6m40s
kube-system kube-apiserver-kubemaster 1/1 Running 0 6m40s
kube-system kube-controller-manager-kubemaster 1/1 Running 0 6m40s
kube-system kube-proxy-gs7q7 1/1 Running 0 6m40s
kube-system kube-scheduler-kubemaster 1/1 Running 0 6m40s 
说明:node状态是NotReady
pod中coredns的状态是Pending
原因在于我们还没有安装网络pod
 
2,安装calico
calico的用途?
calico是一个虚拟网络解决方案,
它利用路由规则实现动态组网,
通过BGP协议通告路由
[root@kubemaster ~]# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
然后稍后查看pod状态:
[root@kubemaster ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-76d4774d89-nnp4h 1/1 Running 0 20m
kube-system calico-node-xmmj4 1/1 Running 0 20m
kube-system coredns-7ff77c879f-ttnr9 1/1 Running 0 36m
kube-system coredns-7ff77c879f-x5vps 1/1 Running 0 36m
kube-system etcd-kubemaster 1/1 Running 1 36m
kube-system kube-apiserver-kubemaster 1/1 Running 1 36m
kube-system kube-controller-manager-kubemaster 1/1 Running 1 36m
kube-system kube-proxy-gs7q7 1/1 Running 1 36m
kube-system kube-scheduler-kubemaster 1/1 Running 1 36m
状态都是Running,表示网络插件安装无误
查看node状态:
[root@kubemaster ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
kubemaster Ready master 41m v1.18.3

状态已变成了Ready

查看calico安装的镜像:
[root@kubemaster ~]# docker images | grep calico
calico/node v3.14.1 04a9b816c753 2 weeks ago 263MB
calico/pod2daemon-flexvol v3.14.1 7f93af2e7e11 2 weeks ago 112MB
calico/cni v3.14.1 35a7136bc71a 2 weeks ago 225MB
calico/kube-controllers v3.14.1 ac08a3af350b 2 weeks ago 52.8MB
3,安装colico后报错的一个情况:
如果pod的状态出现Init:ImagePullBackOff或Init:ErrImagePull,
 表示docker在下载calico的镜像时出错:
可以在docker的配置文件中增加aliyun的镜像地址:
例如:
[root@kubemaster ~]# more /etc/docker/daemon.json
{
"registry-mirrors":["https://o3trwnyj.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
修改完成后重启docker服务即可:
[root@kubemaster ~]# systemctl restart docker

五,开启单机模式:配置master节点也作为worker node可运行pod

1,删除原有的taint设置

[root@kubemaster ~]# kubectl taint nodes kubemaster node-role.kubernetes.io/master-
node/kubemaster untainted
说明:此命令的作用是删除taint
 
2,如何查看当前taint的情况?
[root@kubemaster ~]# kubectl describe node kubemaster
Taints:一项的值如果是:<none>,表示删除taint成功
说明:如果要取消master节点运行pod,使用下面的命令:
kubectl taint nodes kubemaster node-role.kubernetes.io/master=:NoSchedule
这个命令作用是指定:master上的taint权限是:一定不能被调度
三个取值的含义分别是:
NoSchedule: 一定不能被调度
PreferNoSchedule: 尽量不要调度
NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
说明:默认值就是: node-role.kubernetes.io/master:NoSchedule
 

六,测试:在master上运行一个tomcat容器:

1,生成rc的配置文件
[root@kubemaster k8s]# vi tomcat-rc.yaml
内容:
apiVersion: v1
kind: ReplicationController
metadata:
name: tomcat-demo
spec:
replicas: 1
selector:
app: tomcat-demo
template:
metadata:
labels:
app: tomcat-demo
spec:
containers:
- name: tomcat-demo
image: tomcat
ports:
- containerPort: 8080
2,创建rc
[root@kubemaster k8s]# kubectl apply -f tomcat-rc.yaml
replicationcontroller/tomcat-demo created
 
查看效果
[root@kubemaster k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
tomcat-demo-7pnzw 0/1 ContainerCreating 0 23s
 
状态变为running后可用:
[root@kubemaster k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
tomcat-demo-7pnzw 1/1 Running 0 6m43s
 
查看ip:
[root@kubemaster k8s]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-demo-7pnzw 1/1 Running 0 10m 172.16.141.7 kubemaster <none> <none>
在宿主机上用curl查看,这个默认是一个404报错页面,
[root@kubemaster k8s]# curl http://172.16.141.7:8080
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title>
<style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;}
h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line {height:1px;background-color:#525D76;border:none;}</style></head>
<body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p>
<p><b>Description</b> The origin server did not find a current representation for the target resource
or is not willing to disclose that one exists.</p>
<hr class="line" /><h3>Apache Tomcat/9.0.36</h3>
</body></html>

因为webapps目录下没有可显示的内容

我们登录到容器手动调整一下:
登录到tomcat容器,
[root@kubemaster k8s]# docker exec -it k8s_tomcat-demo_tomcat-demo-7pnzw_default_b59ef37a-6ffe-4ef1-b6dd-1b2186039294_0 /bin/bash  
复制文件到webapps目录下:
root@tomcat-demo-7pnzw:/usr/local/tomcat# cp -axv webapps.dist/* webapps/
用curl查看效果:
[root@kubemaster ~]# curl http://172.16.141.7:8080/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/9.0.36</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head> <body>
<div id="wrapper">
<div id="navigation" class="curved container">
<span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
<span id="nav-hosts"><a href="/docs/">Documentation</a></span>
<span id="nav-config"><a href="/docs/config/">Configuration</a></span>
<span id="nav-examples"><a href="/examples/">Examples</a></span>
<span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
<span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
<span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
<br class="separator" />
</div>

可以正常显示了

3,生成service配置文件
说明:service此处的作用是把容器端口映射到宿主机端口,允许通过宿主机ip访问
[root@kubemaster k8s]# vi tomcat-svc.yaml 
内容:
apiVersion: v1
kind: Service
metadata:
name: tomcat-demo
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30010
selector:
app: tomcat-demo
4,创建service
[root@kubemaster k8s]# kubectl apply -f tomcat-svc.yaml
service/tomcat-demo created
查看service是否创建成功?
[root@kubemaster k8s]# kubectl get service -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18h <none>
tomcat-demo NodePort 10.111.234.185 <none> 8080:30010/TCP 35s app=tomcat-demo 
测试用浏览器从外部访问:
如图:
 
 

七,查看linux的版本

[root@kubemaster ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
[root@kubemaster ~]# uname -r
4.18.0-193.el8.x86_64

 

linux(centos8):kubeadm单机安装kubernetes(kubernetes 1.18.3)的更多相关文章

  1. Linux下Kafka单机安装配置方法(图文)

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...

  2. Linux下Kafka单机安装配置方法

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •Kafka将消息以topi ...

  3. ArcGIS 10.1 for Server安装教程系列—— Linux下的单机安装

    http://www.oschina.net/question/565065_81231      因为Linux具有稳定,功能强大等特性,因此常常被用来做为企业内部的服务器,我们的很多用户也是将Ar ...

  4. linux(centos8):基于java13安装rocketmq-4.7.1(解决jdk不兼容的报错)

    一,Rocketmq是什么? 1, RocketMQ是一个队列模型的消息中间件,具有高性能.高可靠.高实时.分布式特点 相比kafka,rocketmq的实时性更强 2,官方网站: http://ro ...

  5. linux(centos8):为prometheus安装grafana(grafana-7.0.3)

    一,grafana的用途 1,grafana是什么? grafana 是用 go 语言编写的开源应用, 它的主要用途是大规模指标数据的可视化展现 它是现在网络架构/应用分析中最流行的时序数据展示工具 ...

  6. Linux下Kafka单机安装配置

    安装jdkJDK版本大于1.8 安装kafkatar -zxvf kafka_2.11-0.10.2.1.tgz mv kafka_2.11-0.10.2.1 /usr/local/kafka 配置k ...

  7. centos7使用kubeadm安装部署kubernetes 1.14

    应用背景: 截止目前为止,高热度的kubernetes版本已经发布至1.14,在此记录一下安装部署步骤和过程中的问题排查. 部署k8s一般两种方式:kubeadm(官方称目前已经GA,可以在生产环境使 ...

  8. kubernetes之Kubeadm快速安装v1.12.0版

    通过Kubeadm只需几条命令即起一个单机版kubernetes集群系统,而后快速上手k8s.在kubeadm中,需手动安装Docker和kubeket服务,Docker运行容器引擎,kubelet是 ...

  9. 使用 Kubeadm 安装部署 Kubernetes 1.12.1 集群

    手工搭建 Kubernetes 集群是一件很繁琐的事情,为了简化这些操作,就产生了很多安装配置工具,如 Kubeadm ,Kubespray,RKE 等组件,我最终选择了官方的 Kubeadm 主要是 ...

随机推荐

  1. 软件开发过程中常用的环境解释DEV FAT UAT PRO

    1.DEV Development environment 开发环境,用于开发者调试使用 2.FAT Feature Acceptance Test environment 功能验收测试环境,用于软件 ...

  2. 常用的Websocket技术一览

    1. 前言 Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据 ...

  3. 我的Python自学之路-001 列表的知识

    #_date_:2020/9/11 '''列表和字典是python中用的最多的数据类型 假如要存储一个班级的人名,需要怎么做?有这么几种方法:1.定义很多个变量: name0 = 'wucaho' n ...

  4. axios+Qs请求数据转表单格式

    import axios from 'axios' import qs from 'qs' axios.post('http://localhost:8888/baseitem/update', qs ...

  5. 【小白学PyTorch】13 EfficientNet详解及PyTorch实现

    参考目录: 目录 1 EfficientNet 1.1 概述 1.2 把扩展问题用数学来描述 1.3 实验内容 1.4 compound scaling method 1.5 EfficientNet ...

  6. JavaScript的this到底代表谁?(this指向哪里?)

    在很多编程语言中都有this这个特殊关键字的存在,比如Java中的this,还有本文要说到的JavaScript中的this.那么,JavaScript中this究竟有什么特性和用法呢?它又是如何定义 ...

  7. 秋天的第一份“干货” I Referer 防盗链,为什么少了个字母 R?

    Referer 为什么叫 Referer?它代表什么意思?在诸多防盗链竞争中它有什么优势? 今天,在聊 Referer 防盗链之前,先来聊聊我们在现实生活中常常碰到的推荐人(Referrer)信息. ...

  8. STM32的CCM RAM

    STM32F407ZGT6的Flash大小为1MB,SRAM大小为(128KB+64KB). 这里SRAM之所以分开表示是因为在芯片内部前面的128KB和后面的64KB地址不是连续的,后面的64KB在 ...

  9. 模式串 从 0 开始的KMP算法

    /** * 看了 b站视频 BV1jb411V78H 对KMP有了一点理解,然后我写了这个代码 * 这个代码和视频里面的有一点不同,字符串是从 0 开始的,而不是从1 开始的 * 希望能够帮到学习KM ...

  10. Java知识日常收集整理001Java获取变量的数据类型的实现方法

    一.具体情况区分 对于简单类型变量,是无法直接获得变量类型的:要想获取,必须自定义函数进行返回. 对于包装类型变量,是可以直接获得的,变量名称.getClass().getName(); 二.代码实现 ...