Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
名称 Kubernetes 源于希腊语,意为 “舵手” 或 “飞行员”。Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在 Google 在大规模运行生产工作负载方面拥有十几年的经验的基础上,结合了社区中最好的想法和实践。
容器是打包和运行应用程序的好方式。在生产环境中,您需要管理运行应用程序的容器,并确保不会停机。例如,如果一个容器发生故障,则需要启动另一个容器。如果系统处理此行为,会不会更容易?
这就是 Kubernetes 的救援方法!Kubernetes 为您提供了一个可弹性运行分布式系统的框架。Kubernetes 会满足您的扩展要求、故障转移、部署模式等。例如,Kubernetes 可以轻松管理系统的 Canary 部署。
Kubernetes 为您提供:
1、创建tomcat集群 请求过来-》master节点的apiserver。
2、apiserver解析请求,把需要干的活解析出来,放在etcd存储集群中。
3、apiserver通知 controller manager ,要干活了,controller manager 再从apiserver获取现在还没做的部署
4、controller manager拿到需要做的部署,产生一次部署信息。把这个东西又存到etcd里面。
5、通知 schduler(调度器),该进行调度了,schduler再从apiserver里面拿到刚才controller manager生产的部署信息,进行调度(找一个闲的节点,进行调度)。
6、scheduler 把这个调度规则保存到etcd里面。
7、其他node节点的kubelet 会监听apiserver。发现有自己要干的活了。kubelet就要来活。进行部署。
# 关闭防火墙
[root@k8s01 ~]# systemctl stop firewalld
[root@k8s03 ~]# systemctl disable firewalld
# 关闭selinux
[root@k8s01 ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
[root@k8s01 ~]# setenforce 0
# 关闭swap分区
[root@k8s01 ~]# swapoff -a
[root@k8s01 ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab
# 绑定hosts
[root@k8s01 ~]# cat /etc/hosts
::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6
127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4
172.26.55.13k8s01
172.26.55.14 k8s02
172.26.55.15 k8s03
[root@k8s01 ~]# ping -c 2 k8s01
PING k8s01 (172.26.55.13) 56(84) bytes of data.
64bytes from k8s01 (172.26.55.13): icmp_seq=1ttl=64time=0.012 ms
64bytes from k8s01 (172.26.55.13): icmp_seq=2ttl=64time=0.021 ms
---k8s01 pingstatistics ---
2packets transmitted, 2received, 0% packet loss, time 999ms
rtt min/avg/max/mdev =0.012/0.016/0.021/0.006 ms
[root@k8s01 ~]# ping -c 2 k8s02
PING k8s02 (172.26.55.14) 56(84) bytes of data.
64bytes from k8s02 (172.26.55.14): icmp_seq=1ttl=64time=0.352 ms
64bytes from k8s02 (172.26.55.14): icmp_seq=2ttl=64time=0.217 ms
---k8s02 pingstatistics ---
2packets transmitted, 2received, 0% packet loss, time 999ms
rtt min/avg/max/mdev =0.217/0.284/0.352/0.069 ms
[root@k8s01 ~]# ping -c 2 k8s03
PING k8s03 (172.26.55.15) 56(84) bytes of data.
64bytes from k8s03 (172.26.55.15): icmp_seq=1ttl=64time=0.418 ms
64bytes from k8s03 (172.26.55.15): icmp_seq=2ttl=64time=0.232 ms
---k8s03 pingstatistics ---
2packets transmitted, 2received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev =0.232/0.325/0.418/0.093 ms
# 修改 /etc/sysctl.conf
# 如果有配置,则修改
sed-i"s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g"/etc/sysctl.conf
sed-i"s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g"/etc/sysctl.conf
sed-i"s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g"/etc/sysctl.conf
sed-i"s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g"/etc/sysctl.conf
sed-i"s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g"/etc/sysctl.conf
sed-i"s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g"/etc/sysctl.conf
sed-i"s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g"/etc/sysctl.conf
# 可能没有,追加
echo"net.ipv4.ip_forward = 1">> /etc/sysctl.conf
echo"net.bridge.bridge-nf-call-ip6tables = 1">> /etc/sysctl.conf
echo"net.bridge.bridge-nf-call-iptables = 1">> /etc/sysctl.conf
echo"net.ipv6.conf.all.disable_ipv6 = 1">> /etc/sysctl.conf
echo"net.ipv6.conf.default.disable_ipv6 = 1">> /etc/sysctl.conf
echo"net.ipv6.conf.lo.disable_ipv6 = 1">> /etc/sysctl.conf
echo"net.ipv6.conf.all.forwarding = 1">> /etc/sysctl.conf
# 执行命令以应用
[root@k8s-001 ~]# sysctl -p
# 卸载旧版本
sudoyum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装基础以来
yum install -yyum-utils \
device-mapper-persistent-data \
lvm2
# 配置docker yum源
sudoyum-config-manager \
--add-repo\
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装并启动 docker
yum install -ydocker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
systemctl enable docker
systemctl startdocker
# 配置docker加速
sudomkdir-p/etc/docker
sudotee/etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
# 必须先安装 nfs-utils 才能挂载 nfs 网络存储
[root@k8s01 ~]# yum install -y nfs-utils
[root@k8s03 ~]# yum remove -y kubelet kubeadm kubectl
已加载插件:fastestmirror
参数 kubelet 没有匹配
参数 kubeadm 没有匹配
参数 kubectl 没有匹配
不删除任何软件包
# 配置K8S的yum源
cat<<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
[root@k8s01 ~]# yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
[root@k8s01 ~]# systemctl enable kubelet && systemctl start kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@k8s01 ~]# systemctl enable kubelet && systemctl start kubelet
[root@k8s01 ~]# vim mast.sh
#!/bin/bash
images=(
kube-apiserver:v1.17.3
kube-proxy:v1.17.3
kube-controller-manager:v1.17.3
kube-scheduler:v1.17.3
coredns:1.6.5
etcd:3.4.3-0
pause:3.1
)
forimageName in${images[@]}; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
[root@k8s01 ~]# chmod 777 mast.sh
[root@k8s01 ~]# sh mast.sh
---------------------以上所有操作主节点与worker节点都要执行----------------------
kubeadm init \
--apiserver-advertise-address=172.26.248.150 \
--image-repositoryregistry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-versionv1.17.3 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
mkdir-p$HOME/.kube
sudocp-i/etc/kubernetes/admin.conf $HOME/.kube/config
sudochown$(id -u):$(id -g)$HOME/.kube/config
kubeadm join 172.26.184.101:6443 --token98mq7n.blsjom2b416sodow \
--discovery-token-ca-cert-hashsha256:a1cd9ab6c0f26cd1e792bc953228a0492948f9b85620bc448dbe1ce2d871cda8
kubectl apply -fhttps://docs.projectcalico.org/manifests/calico.yaml
#1、使用刚才master打印的令牌命令加入
kubeadm join 172.26.248.150:6443 --tokenktnvuj.tgldo613ejg5a3x4 \
--discovery-token-ca-cert-hashsha256:f66c496cf7eb8aa06e1a7cdb9b6be5b013c613cdcf5d1bbd88a6ea19a2b454ec
#2、如果超过2小时忘记了令牌,可以这样做
kubeadm token create --print-join-command#打印新令牌
kubeadm token create --ttl0--print-join-command#创建个永不过期的令牌
[root@k8s-001 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-001 Ready master 6h58m v1.17.3
k8s-002 Ready <none> 6h50m v1.17.3
如果文章有任何错误欢迎不吝赐教,其次大家有任何关于运维的疑难杂问,也欢迎和大家一起交流讨论