k8s安装部署
k8s 官网详解: k8s官网
0.k8s安装部署环境准备
准备环境:三台centos7 服务器
192.168.35.6 k8s-master(主)
192.168.35.7 k8s-node-1(节点)
192.168.35.8 k8s-node-2(节点)
#kubernetes(k8s)的安装方法
五种方法:
kubernetes 二进制安装 (配置最繁琐,不亚于安装openstack)
kubeadm 安装 (谷歌推出的自动化安装工具,网络有要求)
minikube 安装 (仅仅用来体验k8s)
yum 安装 (最简单,版本比较低====学习推荐此种方法)
go编译安装 (最难)
我们采用yum安装,学习怎么使用k8s才是重点
1.修改主机和host 解析
#请在6-7-8三台机器都执行如下操作
vim /etc/hosts:
192.168.35.6 k8s-master
192.168.35.7 k8s-node-1
192.168.35.8 k8s-node-2
修改主机名:
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node-1
hostnamectl set-hostname k8s-node-2
2.安装docker-ce版本
##如果安装有docker-ce版本,需要全部卸载干净(推荐你使用全新的机器安装)
[root@k8s-node-1 ~]# rpm -qa |grep docker
docker-ce-19.03.3-3.el7.x86_64
docker-ce-cli-19.03.3-3.el7.x86_64
[root@k8s-node-1 ~]# rpm -e docker-ce-19.03.3-3.el7.x86_64
[root@k8s-node-1 ~]# rpm -e docker-ce-cli-19.03.3-3.el7.x86_642
[root@k8s-node-1 ~]# rm -rf /var/lib/docker/* 清空之前docker产生的所有文件。
[root@k8s-node-1 ~]# rm -rf /etc/docker/*
#安装docker-ce(3台机器都执行)
1.安装yum-utils
[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
2.为yum源添加docker仓库位置
[root@k8s-master ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@k8s-master ~]# yum install docker-ce -y
[root@k8s-master ~]# systemctl start docker
[root@k8s-master ~]# systemctl enable docker
3.验证docker 是否安装成功
[root@k8s-master ~]# docker -v
Docker version 20.10.5, build 55c4c88
3.master节点安装etcd (k8s数据库kv类型存储)原生支持做集群
[root@k8s-master ~]# yum install etcd.x86_64 -y
[root@k8s-master ~]# vim /etc/etcd/etcd.conf
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.35.6:2379"
启动etcd
[root@k8s-master ~]# systemctl start etcd.service
[root@k8s-master ~]# systemctl enable etcd.service
测试:
#set 设置一队键值 数据存储
[root@k8s-master ~]# etcdctl set testdir/testkey0 hello
hello
#get获取
[root@k8s-master ~]# etcdctl get testdir/testkey0
hello
#检测集群状态
[root@k8s-master ~]# etcdctl -C http://192.168.35.6:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.35.6:2379
cluster is healthy
4.master节点安装kubernetes
[root@k8s-master ~]# yum install kubernetes-master.x86_64 -y
#修改配置文件如下
[root@k8s-master ~]# grep '^[a-Z]' /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.35.6:2379"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
#修改config文件
[root@k8s-master ~]# vim /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.35.6:8080"
#启动:k8s
#启动kube-apiserver
#这个服务用来:接受并响应用户的请求
[root@k8s-master ~]# systemctl start kube-apiserver.service
[root@k8s-master ~]# systemctl enable kube-proxy.service
#启动 kube-controller-manager
#控制管理器的概念,保证容器存活
#每隔一段时间去扫描容器状态,看有没有死了。
#容器死了,会调度apiserver再起一个新的容器
#保证容器的个数,比如我们设定起三个nginx容器,多了就会杀掉,少了就会起
[root@k8s-master ~]# systemctl enable kube-controller-manager.service
[root@k8s-master ~]# systemctl start kube-controller-manager.service
#启动kube-scheduler
#调度器,选择启动容器的node节点,通俗点就是容器在哪一个节点服务器上面创建
[root@k8s-master ~]# systemctl enable kube-scheduler.service
[root@k8s-master ~]# systemctl start kube-scheduler.service
到此主master 192.168.35.6 k8s安装好了
5.node节点安装kubernetes
#(192.168.35.7,8两台服务器都执行如下命令)两台机器都执行
[root@k8s-node-1 ~]# yum list installed | grep docker
containerd.io.x86_64 1.4.4-3.1.el7 @docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:20.10.5-3.el7 @docker-ce-stable
docker-ce-rootless-extras.x86_64 20.10.5-3.el7 @docker-ce-stable
[root@k8s-node-1 ~]# yum remove -y docker-ce.x86_64 docker-ce-cli.x86_64 docker-ce-rootless-extras.x86_64 containerd.io.x86_64
[root@k8s-node-1 ~]# yum install kubernetes-node.x86_64 -y
[root@k8s-node-1 ~]# vim /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.35.6:8080"
[root@k8s-node-1 ~]# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=k8s-node-1 #注意192.168.35.8这里需要配置k8s-node-2
KUBELET_API_SERVER="--api-servers=http://192.168.35.6:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
#启动kubelet服务
#调用docker,管理容器的生命周期
[root@k8s-node-1 ~]# systemctl enable kubelet.service
[root@k8s-node-1 ~]# systemctl start kubelet.service
#启动kube-proxy
#提供容器网络访问
[root@k8s-node-1 ~]# systemctl enable kube-proxy.service
[root@k8s-node-1 ~]# systemctl start kube-proxy.service
检测node集群是否正常:
主master(192.168.35.6)主机执行:
[root@k8s-master ~]# kubectl get nodes
NAME STATUS AGE
k8s-node-1 Ready 6m
k8s-node-2 Ready 41s
6.配置k8s服务器网络
K8s支持多种网络类型,具体参考官网介绍或者百度。
我们这里选择安装flannel网络。
#1.所有k8s服务器配置flannel网络(192.168.35.6,192.168.35.7,192.168.35.8三台机器都执行如下操作)
[root@k8s-master ~]# yum install flannel -y
[root@k8s-master ~]# sed -i 's#http://127.0.0.1:2379#http://192.168.35.6:2379#g' /etc/sysconfig/flanneld
[root@k8s-master ~]# cat /etc/sysconfig/flanneld
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.35.6:2379"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/atomic.io/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
#之后再192.168.35.7,192.168.35.8两台节点也执行如上步骤就可以了
7.master(192.168.35.6) 节点:创建网络,并重启服务
#mk 递归创建目录config, 里面存的值是: ‘{ “Network”: “172.16.0.0/16” }’
# key -------------------- value
#网络16位,可以分配足够多的IP地址给容器
[root@k8s-master ~]# etcdctl mk /atomic.io/network/config '{ "Network": "172.16.0.0/16" }'
{ "Network": "172.16.0.0/16" }
#master(192.168.35.6)重启服务
[root@k8s-master ~]# systemctl enable flanneld.service
[root@k8s-master ~]# systemctl restart flanneld.service
[root@k8s-master ~]# systemctl restart docker
[root@k8s-master ~]# systemctl restart kube-apiserver.service
[root@k8s-master ~]# systemctl restart kube-controller-manager.service
[root@k8s-master ~]# systemctl restart kube-scheduler.service
#Node(192.168.35.7,8)节点:重启服务
[root@k8s-node-1 ~]# systemctl enable flanneld.service
[root@k8s-node-1 ~]# systemctl restart flanneld.service
[root@k8s-node-1 ~]# systemctl restart docker
[root@k8s-node-1 ~]# systemctl restart kubelet.service
[root@k8s-node-1 ~]# systemctl restart kube-proxy.service
[root@k8s-node-2 ~]# systemctl enable flanneld.service
[root@k8s-node-2 ~]# systemctl restart flanneld.service
[root@k8s-node-2 ~]# systemctl restart docker
[root@k8s-node-2 ~]# systemctl restart kubelet.service
[root@k8s-node-2 ~]# systemctl restart kube-proxy.service
#测试容器网络
#三台都起一个容器,看ip a地址,然后互相ping,发现都是通的
#三台都起一个容器,看ip a地址,然后互相ping,发现都是通的
[root@k8s-master ~]# docker run -it busybox
[root@k8s-node-1 ~]# docker run -it busybox
[root@k8s-node-2 ~]# docker run -it busybox
/ # ping baidu.com #首先看是否外网正常
PING baidu.com (39.156.69.79): 56 data bytes
64 bytes from 39.156.69.79: seq=0 ttl=127 time=30.514 ms
/ # ip a #查看各自的自动生成的IP,互相ping会发现也是通的。
到此网络也配置正常,基础的k8s搭建完毕!
如果网络不通可能是防火墙的问题,要么直接关闭防火墙,或者配置一条规则
#k8s三台服务器都执行
[root@k8s-master ~]#iptables -P FORWARD ACCEPT
[root@k8s-node-1 ~]#iptables -P FORWARD ACCEPT
[root@k8s-node-2 ~]#iptables -P FORWARD ACCEPT