简介
组成结构
组成结构详解
https://k8smeetup.github.io/docs/admin/kube-apiserver/
kube-apiserver:Kubernetes API server 为 api 对象验证并配置数据,包括 pods、
services、 replicationcontrollers 和其它 api 对象,API Server 提供 REST 操作和到
集群共享状态的前端,所有其他组件通过它进行交互。
https://k8smeetup.github.io/docs/admin/kube-scheduler/
kube-scheduler 是一个拥有丰富策略、能够感知拓扑变化、支持特定负载的功能
组件,它对集群的可用性、性能表现以及容量都影响巨大。scheduler 需要考虑独
立的和集体的资源需求、服务质量需求、硬件/软件/策略限制、亲和与反亲和规
范、数据位置、内部负载接口、截止时间等等。如有必要,特定的负载需求可以
通过 API 暴露出来。
https://k8smeetup.github.io/docs/admin/kube-controller-manager/
kube-controller-manager:Controller Manager 作为集群内部的管理控制中心,负
责集群内的 Node、Pod 副本、服务端点(Endpoint)、命名空间(Namespace)、
服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个 Node
意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
https://k8smeetup.github.io/docs/admin/kube-proxy/
kube-proxy:Kubernetes 网络代理运行在 node 上,它反映了 node 上
Kubernetes API 中定义的服务,并可以通过一组后端进行简单的 TCP、UDP 流转
发或循环模式(round robin))的 TCP、UDP 转发,用户必须使用 apiserver API 创
建一个服务来配置代理,其实就是 kube-proxy 通过在主机上维护网络规则并执行
连接转发来实现 Kubernetes 服务访问。
https://k8smeetup.github.io/docs/admin/kubelet/
kubelet : 是主要的节点代理,它会监视已分配给节点的 pod,具体功能如
下:
向 master 汇报 node 节点的状态信息
接受指令并在 Pod 中创建 docker 容器
准备 Pod 所需的数据卷
返回 pod 的运行状态
在 node 节点执行容器健康检查
https://github.com/etcd-io/etcd
etcd:
etcd 是CoreOS公司开发目前是Kubernetes默认使用的key-value数据存储系统,
用于保存所有集群数据,支持分布式集群功能,生产环境使用时需要为 etcd 数
据提供定期备份机制。
kubeadm安装方式
kubernetes安装
注意事项
禁用 swap,selinux,iptables
要求2个cpu内存要大
vim /etc/fstab 注释掉swap
systemctl status firewalld
hostname不能重复
192.168.41.201 master
192.168.41.202 node1
1.安装docker环境
可按阿里云配置来
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
apt-cache madison docker-ce docker-ce-cli #查看合适的版本
#sudo apt-get -y install docker-ce
apt install docker-ce=5:18.09.9~3-0~ubuntu-bionic docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic
2.配置docker加速器
sudo mkdir -p /etc/docker
sudo systemctl daemon-reload
sudo systemctl restart docker
3.配置kubernetes
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
#apt-get purge kubelet kubeadm kubectl 卸载
#apt-cache madison kubelet kubeadm kubectl
#apt-get install -y kubelet=1.15.4-00 kubeadm=1.15.4-00 kubectl=1.15.4-00 指定版本安装
4.初始化master节点
systemctl start kubelet && systemctl enable kubelet
kubeadm version #查看版本
kubeadm config images list --kubernetes-version v1.16.0 #查看安装指定版本 k8s需要的镜像有哪些
官方
docker pull k8s.gcr.io/kube-apiserver:v1.16.0
docker pull k8s.gcr.io/kube-controller-manager:v1.16.0
docker pull k8s.gcr.io/kube-scheduler:v1.16.0
docker pull k8s.gcr.io/kube-proxy:v1.16.0
docker pull k8s.gcr.io/pause:3.1
docker pull k8s.gcr.io/etcd:3.3.15-0
docker pull k8s.gcr.io/coredns:1.6.2
阿里云
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.16.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.16.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.16.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.16.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.15-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.2
开始初始化
流程解析:https://k8smeetup.github.io/docs/reference/setup-tools/kubeadm/kubeadm-
init/#init-workflow
kubeadm init --apiserver-advertise-address=192.168.41.201 --apiserver-bind-port=6443 --kubernetes-version=v1.16.0 --pod-network-cidr=10.10.0.0/16 --service-cidr=10.20.0.0/16 --service-dns-domain=linuxtest.local --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=swap --token-ttl=0
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5.常用指令
kubectl get nodes 查看node
kubectl get pods --all-namespaces 查看pod
kubeadm reset 进行重置
6.网络插件 flannel
https://github.com/coreos/flannel/
下载 https://github.com/coreos/flannel/releases
docker load -i flannel-v0.11.0-linux-amd64.tar.gz
#docker import flannel-v0.11.0-linux-amd64.tar.gz
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
可以修改为本地的hubar
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XIkEWNjD-1577432824054)(2B799B726D894E1686B6B978F9EA28C7)]
kubectl apply -f kube-flannel.yml
kubectl get pods --all-namespaces
7.添加节点
这句话是创建master的时候自动打印的一句话。
kubeadm join 192.168.41.201:6443 --token ypam3v.x2bvebxoyxjrvmlb \
--discovery-token-ca-cert-hash sha256:8d61ea58334e84bbb10376f90b4af64c2720380760289ccb19860dba8d756259
8.创建测试
kubectl run net-test1 --image=alpine --replicas=2 sleep 360000
kubectl get pods
kubectl get pods -o wide
kubectl exec -it net-test1-5fcc69db59-65dgf sh
开启
vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
net.ipv4.ip_forward = 1
要想两个node之间互相ping通
vim kube-flannel.yml
net-conf.json: |
{
"Network": "10.10.0.0/16", #修改这里呢!
"Backend": {
"Type": "vxlan"
}
}
修改网段
kubectl delete -f kube-flannel.yml
kubectl apply -f kube-flannel.yml
之后node会产生
[root@node1 ~]$cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.10.0.0/16
FLANNEL_SUBNET=10.10.1.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
把这个删掉
kubectl get deployment
kubectl delete deployment net-test1
10.实现升级kubeadm
验证当 s k8s 前版本
kubeadm version
apt-cache madison kubeadm #查看 k8s 版本列表
apt-get install kubeadm=1.13.6-00 #安装具体版本
kubeadm version #验证版本
kubeadm upgrade --help #升级命令使用帮助
kubeadm upgrade plan #查看升级计划
kubeadm upgrade apply v1.13.6 #升级master
kubeadm upgrade node config --kubelet-version 1.13.6 #升级各node节点
apt-get install kubelet=1.13.6-00 #在node节点运行.
错误解决
1.今天在Kubernetes的从节点上运行命令【kubectl】出现了如下错误
[root@k8snode1 kubernetes]# kubectl get pod
The connection to the server localhost:8080 was refused - did you specify the right host or port?
出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
立即生效
source ~/.bash_profile
接着再运行kubectl命令就OK了
get pod