k8s全称kubernetes,这个名字大家应该都不陌生,k8s是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱k8s,并且当前k8s已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地,正在如火如荼的发展
k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能
搭建k8s集群需要使用至少3台虚拟机
安装的详细细节可以参考:
vm安装centos7
te72
29x2
如果虚拟机无法连接centos7:
主机名 | ip |
---|---|
k8s-master01 | 192.168.10.100 |
k8s-node01 | 192.168.10.101 |
k8s-node02 | 192.168.10.102 |
Master节点:etcd、api-server、controlor-manager、scheduler
Node节点:kubelet、kube-proxy、docker
系统初始化针对于-所有节点操作
192.168.10.100:
hostnamectl set-hostname k8s-master01192.168.10.101:
hostnamectl set-hostname k8s-node01192.168.10.102:
hostnamectl set-hostname k8s-node02yum install -y conntrack ntpdate ntp jq
curl sysstat libseccomp wget net-tools vim git
swapoff -a && sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
systemctl disable firewalld
systemctl stop firewalld
cat /etc/hosts
192.168.10.100 k8s-master01
192.168.10.101 k8s-node01
192.168.10.102 k8s-node02
CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定
rpm -Uvh .0-3.arch.rpm//安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装 一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt // 设置开机从新内核启动
grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 8 (Core)'
ipvs:解决svc(service)和pod之间的调度关系,并且性能/功能都比iptables强大很多
modprobe br_netfiltercat > /etc/sysconfig/dules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOFchmod 755 /etc/sysconfig/dules && bash /etc/sysconfig/dules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
脚本创建了的/etc/sysconfig/dules文件,保证在节点重启后能自动加载所需模块。 使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块。
yum install ipset ipvsadm -y
每个节点都必须安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo .repoyum install -y docker-ce// 启动docker(启动后会自动生成/etc/docker目录,否则需要手动创建)
systemctl start docker
cat >/etc/docker/daemon.json <<EOF
{"registry-mirrors": [""],"exec-opts": [updriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }
}
EOF// daemon参数解释
registry-mirrors:Docker镜像加速log-driver:Docker用来接收来自容器内部stdout/stderr的日志的模块 json-file会将容器日志存储在docker host machine的/var/lib/docker/containers/<container id>/<container id>-json.log(需要root权限才能够读),既然日志是存在磁盘上的,那么就要磁盘消耗的问题。下面介绍两个关键参数:- max-size,单个日志文件最大尺寸,当日志文件超过此尺寸时会滚动,即不再往这个文件里写,而是写到一个新的文件里。默认值是-1,代表无限。- max-files,最多保留多少个日志文件。默认值是1。"exec-opts": [updriver=systemd"]:Docker使用的文件驱动是systemd
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
所以节点必须安装kubelet kubeadm kubelectl
//导入阿里云的yum仓库
cat <<EOF > /pos.po
[kubernetes]
name=Kubernetes
baseurl=
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=.gpg .gpg
EOF// 指定安装版本(这里统一使用1.15.1)
yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
systemctl enable kubelet.service
//由于默认拉取镜像地址io国内无法访问,这里指定阿里云镜像仓库地址。
kubeadm init
--apiserver-advertise-address=192.168.10.100
--image-repository registry.aliyuncs/google_containers
--kubernetes-version v1.15.1
--service-cidr=10.1.0.0/16
--pod-network-cidr=10.244.0.0/16
初始化master节点重要截图:
使用kubectl工具:
mkdir -p $HOME/.kube
sudo cp -i /etc/f $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl get nodes
只在master节点操作,当node节点加入的时候也会自动安装该插件
kubectl apply -f .yml
这个地方可能会出现,无法获取到raw.githubusercontent的ip
解决方法:
master的网络插件启动成功:
// 修改ConfigMap的kube-system/kube-proxy中的f,把 mode: "" 改为mode: “ipvs" 保存退出即可。
kubectl edit cm kube-proxy -n kube-system// 删除之前的proxy pod
kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
nginx_obj.yaml
apiVersion: v1
kind: ReplicationController
metadata:name: myweb
spec:replicas: 3selector:app: mywebtemplate:metadata:labels:app: mywebspec:containers:- name: nginximage: nginx:1.13ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: myweb
spec:type: NodePortports:- port: 80nodePort: 30000targetPort: 80selector:app: myweb
创建rc
kubectl create -f nginx_obj.yaml
查看pod和svc信息
[root@k8s-master01 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb-l4vkm 1/1 Running 0 5s 10.244.1.2 k8s-node01
myweb-qdxgp 1/1 Running 0 5s 10.244.3.2 k8s-node02
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 443/TCP 22m
myweb NodePort 10.1.205.42 80:30000/TCP 38s
访问地址:192.168.10.100:30000
本文发布于:2024-01-29 03:08:17,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170646890212261.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |