K8s的安装
- 修改IP地址、主机名和host解析 (防火墙开启之后一定要清空规则,不然会阻挡流量)
# 共同操作
systemctl stop firewalld
systemctl disable firewalld.service
iptables -F
iptables-save
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
vim /etc/hosts
10.0.0.11 k8s-master
10.0.0.12 k8s-node-1
10.0.0.13 k8s-node-2
- master节点安装etcd
yum install etcd -y
默认只修改第6行和第21行就可以,其他的不用修改
vim /etc/etcd/etcd.conf
3行:ETCD_DATA_DIR="/var/lib/etcd/" # etcd的数据保存目录
6行:ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" # 2379是对外提供服务 ,2380 是集群之间进行同步的 如果写成localhost 只有本机可以写入数据,其他节点都不可以
9行: ETCD_NAME="node1" # 因为后面要做集群高可用,所以讲这里的default改为node1
21行:ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379" # 集群之间通过10.0.0.11进行同步数据
systemctl start etcd.service
systemctl enable etcd.service
# 创建数据 ,etcd默认存储数据的方式是以键值对的方式进行的
etcdctl set testdir/testkey0 0
etcdctl get testdir/testkey0
# 检测etcd的状态是否健康
etcdctl -C http://10.0.0.11:2379 cluster-health
etcd原生支持做集群
- master节点安装kubernetes
# 如果是集群只需要将这个master多安装几次
yum install kubernetes-master.x86_64 -y
vim /etc/kubernetes/apiserver
8行: KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
11行:KUBE_API_PORT="--port=8080" # 监听的端口
14行: KUBELET_PORT="--kubelet-port=10250" # minions 监听的端口,也就是node节点上的koubelet监听的端口
17行:KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379" # 集群监听的地址,目前只有11,只写它
# 如果是k8s集群的话,可以在后面多次添加几个ip地址
# KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379,10.0.0.12" # 集群监听的地址
23行:KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" # 删除ServiceAccount这个组件,d e 进行删除一个单词
vim /etc/kubernetes/config
22行:KUBE_MASTER="--master=http://10.0.0.11:8080"
systemctl enable kube-apiserver.service
systemctl restart kube-apiserver.service
systemctl enable kube-controller-manager.service
systemctl restart kube-controller-manager.service
systemctl enable kube-scheduler.service
systemctl restart kube-scheduler.service
检查服务是否安装正常
[root@k8s-master ~]# kubectl get componentstatus
NAME STATUS MESSAGE ERROR
etcd-0 Healthy {"health":"true"}
scheduler Healthy ok
controller-manager Healthy ok
- node节点安装kubernetes
yum install kubernetes-node.x86_64 -y
vim /etc/kubernetes/config
22行:KUBE_MASTER="--master=http://10.0.0.11:8080" # 让controller scheduler proxy 找到api-server
vim /etc/kubernetes/kubelet
5行:KUBELET_ADDRESS="--address=0.0.0.0" # kubelet监听的地址 如果为空监听所有
8行:KUBELET_PORT="--port=10250"
11行:KUBELET_HOSTNAME="--hostname-override=自身ip" # 这个地方可以写成本机的ip地址(更好,唯一)留 空 的话就是自己真实的 主机名
14行:KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080" # 告诉kubelete去哪里寻找api-server
systemctl enable kubelet.service
systemctl restart kubelet.service
systemctl enable kube-proxy.service
systemctl restart kube-proxy.service
在master节点检查
[root@k8s-master ~]# kubectl get nodes
NAME STATUS AGE
10.0.0.12 Ready 8m
10.0.0.13 Ready 2m
5.所有节点配置flannel网络
#所有节点
yum install flannel -y
sed -i 's#http://127.0.0.1:2379#http://10.0.0.11:2379#g' /etc/sysconfig/flanneld
##master节点:
etcdctl mk /atomic.io/network/config '{"Network":"172.18.0.0/16","Backend": {"Type": "vxlan"}}'
systemctl enable flanneld.service
systemctl restart flanneld.service
##node节点:
systemctl enable flanneld.service
systemctl restart flanneld.service
systemctl restart docker
etcdctl命令介绍
https://www.bookstack.cn/read/huweihuang-kubernetes-notes/etcd-etcdctl-v2.md
# 当做完上面的操作之后,默认就全部都是flannel网络了,网段是随机分配的。
node节点上查看
我们试着在node1 和 node2上运行容器,并且查看ip地址
我们在master节点上ping一下两个从节点的容器
我们可以发现我们可以ping通他们的网关但是不能够ping通到容器的里面,就是因为iptables规则默认是 拒绝状态,我们再下面改为accept来实现容器之间的联通
node节点
# 在flanel中,默认状态下是拒绝外部访问容器内部的,必须要将默认的改为accept
vim /usr/lib/systemd/system/docker.service
#在[Service]区域下增加一行
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
systemctl daemon-reload
systemctl restart docker
补充:system命令的介绍:
https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
再次查看是否可以ping通
- 配置master为镜像仓库
#master节点
yum install docker -y
#所有节点
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]
}
systemctl daemon-reload &&\
systemctl restart docker.service
或者我们也可以这样修改,让所有节点去寻找这个私库,两个方式选择其中一个即可
#所有节点
sed -i 's/^ExecStart.*/& --insecure-registry 10.0.0.11:5000/' /usr/lib/systemd/system/docker.service
systemctl daemon-reload &&\
systemctl restart docker.service
# 添加路由转发
echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
#master节点
yum install docker -y
docker pull registry
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
安装完毕