kubeadm部署kubernetes1.15 文档
一 主机环境主机系统server88master节点Centos7.7server87node节点Centos7.7server101node节点Centos7,6安装K8s环境准备1.防火墙一定要提前关闭systemctl stop firewalld & systemctl disable firewalld2.关闭sw...
一 主机环境
主机 | 系统 | |
---|---|---|
server88 | master节点 | Centos7.7 |
server87 | node节点 | Centos7.7 |
server101 | node节点 | Centos7,6 |
安装K8s环境准备
1.防火墙一定要提前关闭
systemctl stop firewalld & systemctl disable firewalld
2.关闭swap内存
在安装K8S集群时,Linux的Swap内存交换机制是一定要关闭的,否则会因为内存交换而影响稳定性。
swapoff -a #重启后恢复
3.关闭Selinux
sudo setenforce 0
二.安装K8S(三台服务器操作)
安装K8s分别有yum安装,源码安装,二进制安装,kubeadm安装,这里选择官方的工具kubeadm安装。
安装K8s要注意K8s与docker的版本兼容问题,防止出现版本不兼容情况。
配置下载源
1.官方仓库无法使用,建议使用阿里源的仓库添加kubernetes.repo
vim /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
2.下载组件kubelet、kubeadm、kubectl
这里安装Kubernetes1.15版本
sudo yum install kubelet-1.15.1-0.x86_64 kubectl-1.15.1-0.x86_64 kubeadm-1.15.1-0.x86_64
配置kubelet的cgroup drive
确保docker 的cgroup drive 和kubelet的cgroup drive一样
[root@server88 ~]# docker info | grep -i cgroup
Cgroup Driver: cgroupfs
然后再查看我们的kubectl的Cgroup
[root@k8s-node1 ~]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
没有的话,我们就加入进去
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
重新加载
[root@k8s-node1 ~]# systemctl daemon-reload
[root@k8s-node1 ~]# systemctl enable kubelet
三 下载K8S集群的核心组件的镜像(三台服务器操作)
K8s将之前的kube-apiserver,kube-scheduler,kube-proxy以及数据库etcd等组件都打包成了镜像,在使用的是K8S官方提供的kubeadm工具来初始化K8S集群,而初始化操作kubeadm init会默认去访问谷歌的服务器,以下载集群所依赖的Docker镜像,因此也会超时失败。所以需要可提前导入这些镜像,kubeadm init操作就会发现这些镜像已经存在,就不会再去访问谷歌。
下载docker镜像
要注意的是:要拉取的4个核心组件kube-scheduler,kube-proxy,kube-apiserver,kube-controller-manager的镜像版本和你安装的 kubelet、kubeadm、kubectl 版本需要是一致的。
sudo docker pull mirrorgooglecontainers/kube-scheduler:v1.15.1
sudo docker pull mirrorgooglecontainers/kube-proxy:v1.15.1
sudo docker pull mirrorgooglecontainers/kube-apiserver:v1.15.1
sudo docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.1
sudo docker pull mirrorgooglecontainers/etcd:3.3.10
sudo docker pull mirrorgooglecontainers/pause:3.1
sudo docker pull mirrorgooglecontainers/coredns:1.3.1
手动修改镜像tag,伪装成k8s.gcr.io的名称
例:
sudo docker tag mirrorgooglecontainers/kube-scheduler:v1.15.1 k8s.gcr.io/kube-scheduler:v1.15.1
修改完成如下
k8s.gcr.io/kube-proxy:v1.15.1
k8s.gcr.io/kube-scheduler:v1.15.1
k8s.gcr.io/kube-apiserver:v1.15.1
k8s.gcr.io/kube-controller-manager:v1.15.1
k8s.gcr.io/coredns:1.3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/pause:3.1
四 创建集群
在Master主节点(server88)上执行初始化命令:
[root@k8s-node1 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.15.1 --apiserver-advertise-address=192.168.0.88
含义:
1.--pod-network-cidr=192.168.0.0/16 集群将使用Calico网络,这里需要提前指定Calico的子网范围
2.--kubernetes-version=v1.15.1指定K8S版本,这里必须与之前导入到Docker镜像版本一致,不然会访问谷歌去重新下载K8S最新版的Docker镜像
3.--apiserver-advertise-address绑定的网卡IP,这里一定要绑定到192.168.0.88
执行初始化命令
[root@k8s-node1 ~]# kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.15.1 --apiserver-advertise-address=192.168.0.89
初始化成功
将加入K8s集群命令保留存放,后续会使用该命令将node节点加入集群
kubeadm join 192.168.0.88:6443 --token yxy6sj.mkhgdntu38t1ouc1 \
--discovery-token-ca-cert-hash sha256:7ffbf14048599d370edfaa9855b569219363d23c5a76cb3c6b262b7b554de6d2
五 创建网络
根据官网文档需要在主节点上执行下面命令
[root@k8s-node1 ~]# sudo kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
执行成功后查看,calico网络组件容器运行成功
六 将其他节点加入K8s集群
在其他两个节点server87和server101上,执行主节点生成的kubeadm join命令加入集群
server87
server101
加入集群成功
验证集群
执行查看节点命令
kubectl get node
#查看日志
sudo journalctl -f -u kubelet
kubeadm token create
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
七 测试集群功能
创建pod资源
运行两个pod资源
可以看见,两个pod资源已经分配到不同的主机上运行了
八 故障记录
1.从库无法执行kubectl命令查看集群信息
出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后在需要的用户下配置环境变量:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
再次执行命令,解决问题
2.从库server101节点加入集群失败
在server101主机上执行执行kubeadm reset重置,重新执行加入集群命令即可解决
kubeadm join 192.168.0.88:6443 --token yxy6sj.mkhgdntu38t1ouc1 \
--discovery-token-ca-cert-hash sha256:7ffbf14048599d370edfaa9855b569219363d23c5a76cb3c6b262b7b554de6d2
K8s常用命令
1.获取节点相应服务的信息:kubectl get nodes
2.查看集群信息: kubectl cluster-info
3.查看pods所在的运行节点 kubectl get pods -o wide
4.查看指定资源的详细信息 kubectl describe pod nginx
5.查看所有pod的IP及节点kubectl get pods -o wide --all-namespaces
6.创建资源 kubectl create -f 文件名.yaml
7.删除资源
kubectl delete -f 文件名
kubectl delete pod pod名
kubectl delete rc rc名
kubectl delete service service名
kubectl delete pod --all
pods -o wide
4.查看指定资源的详细信息 kubectl describe pod nginx
5.查看所有pod的IP及节点kubectl get pods -o wide --all-namespaces
6.创建资源 kubectl create -f 文件名.yaml
7.删除资源
kubectl delete -f 文件名
kubectl delete pod pod名
kubectl delete rc rc名
kubectl delete service service名
kubectl delete pod --all
更多推荐
所有评论(0)