部署Kubernetes单机版



0x00环境准备

本文使用主机的系统皆为CentOS 7,所有机器之间网络连接正常。
确保3台主机的 /etc/hostname 和/etc/hosts文件中已经修改为正确的主机名。以及相应的主机名称解析,修改后,请重启系统。
注意:请确保CPU至少2核,内存2G
所有命令皆在root用户下运行

参考:
https://blog.csdn.net/u013469753/article/details/109239593

Hostnamer:k8s-singlenode

主机名IP地址作用配置
k8s-singlenode192.168.2.107Master&Work2U4G64G

1.host相关配置

(1)文件修改

配置文件/etc/hosts

# k8s-singlenode
hostnamectl set-hostname k8s-singlenode
exec bash
hostnamectl
hostname
cat /etc/hosts
echo 192.168.2.107 k8s-singlenode >> /etc/hosts
cat /etc/hosts

注:
①某些发行版本在/etc/hosts 文件中添加了多余的条目,该条目将实际的主机名解析为另一个回送IP地址,例如127.0.1.1。如果有的话,则必须将其注释或删除,以防止名称解析问题。
②不要删除127.0.0.1条目。
③每一个节点都需要对其他节点进行主机名的解析配置。
④主机名修改完成后,退出当前终端,重新登录服务器。

(2)验证连通性

ping -c 4 k8s-singlenode
ping -c 4 qq.com

2.防火墙配置

在实验环境中可以选择直接禁用防火墙,但是在生产环境中根据实际的需求进行规则的配置。
禁用防火墙

(1)关闭firewalld

在CentOS7上面防火墙是firewalld服务,停止并且禁止开机启动firewalld.service

systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service

(2)关闭 selinux

setenforce 0
getenforce
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
grep SELINUX=disabled /etc/sysconfig/selinux
grep SELINUX=disabled /etc/selinux/config

3.配置k8s.conf

参考链接

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

执行如下命令使修改生效:

modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

4.swap配置

禁用swap
Linux swapoff命令用于关闭系统交换区(swap area)。swapoff实际上为swapon的符号连接,可用来关闭系统的交换区。

sed -i '/swap/ s/^/#/' /etc/fstab
swapoff -a
free -m

-a 将/etc/fstab文件中所有设置为swap的设备关闭
-h 帮助信息
-V 版本信息

5.Centos换回国内源

Centos7换回国内源

cd
mkdir ori_repo-config
mv /etc/yum.repos.d/* ./ori_repo-config/
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

yum clean all
yum makecache
yum repolist
cd

6.基础安装

(1)Linux常用工具

yum install -y lsof vim net-tools wget git curl
yum install -y yum-utils device-mapper-persistent-data lvm2

0x01安装步骤

1.安装docker环境

所有节点都需要安装docker,
docker官方安装指南
菜鸟教程参考

阿里教程:
https://developer.aliyun.com/article/110806
https://yq.aliyun.com/articles/626118

(1)卸载旧的版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

(2)官方脚本自动安装

手动安装,请参考菜鸟教程的安装指南
通过阿里云安装。

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker
systemctl status docker
systemctl enable docker
systemctl list-unit-files |grep chronyd.service
docker version

(3)配置Docker加速

快速配置

cat > /etc/docker/daemon.json <<EOF
{
    "registry-mirrors":["https://docker.mirrors.ustc.edu.cn/"]
}
EOF

or

tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://ustc-edu-cn.mirror.aliyuncs.com",
        "http://hub-mirror.c.163.com",
        "https://registry.aliyuncs.com"
    ]
}
EOF

重新启动Docker并查看Docker信息

systemctl daemon-reload
docker info
systemctl restart docker
systemctl status docker
docker info

至此,docker安装完成。

2.安装Kubernetes工具

(1)安装软件说明

安装kubectl、kubelet、kubeadm

  • kubectl
    kubectl是Kubernetes命令行工具。通过运行kubectl可以部署和管理应用,查看各类资源,创建、删除和更新各种组件。
  • kublet
    kublet运行在Cluster的所有节点上,负责启动Pod和容器。
  • kubeadm
    kubeadm用于初始化Cluster。

(2)配置Kubernetes的阿里云YUM

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

(3)安装kubectl、kubelet、kubeadm

yum clean all
yum makecache fast -y
yum install -y kubelet kubeadm kubectl

启动kubelet服务

systemctl start kubelet
systemctl status kubelet
systemctl enable kubelet

此时status应该是无法正常启动的,可以忽略,具体的解决措施请继续下一节的部署操作。

systemctl status kubelet

问题解释:kubelet服务启动失败,错误代码255

至此,所有节点,Kubernetes工具安装完成。

3.安装Kubernetes

(1)配置 kubelet启动参数

docker info |grep Cgroup
cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 
sed -i 'N;4iEnvironment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"' /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet

(2)下载镜像

pwd
cd
kubeadm config images list

将输出结果的版本信息填入下方images

touch k8s-pull-image.sh
vim k8s-pull-image.sh
#!/bin/bash
images=(
    kube-apiserver:v1.21.1
    kube-controller-manager:v1.21.1
    kube-scheduler:v1.21.1
    kube-proxy:v1.21.1
    pause:3.4.1
    etcd:3.4.13-0
    coredns/coredns:v1.8.0
)
for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} k8s.gcr.io/${imageName}
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
done

执行脚本

bash ./k8s-pull-image.sh

执行过程中,无法找到 coredns:1.8.0,手动安装coredns:1.8.0dockerhub地址

docker pull coredns/coredns:1.8.0
docker tag docker.io/coredns/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
docker rmi docker.io/coredns/coredns:1.8.0
kubeadm config images list
docker images

(3)初始化Master

注意:主机地址空间、kubernetes版本

kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--kubernetes-version=v1.21.1 \
--ignore-preflight-errors=NumCPU \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 --v=6

如需重新初始化,则需要先进行reset

kubeadm reset

(4)配置系统变量

当前root用户下

echo export KUBECONFIG=/etc/kubernetes/admin.conf >> ~/.bash_profile
source ~/.bash_profile

根据初始提示,普通用户centos

su centos
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
exit
export KUBECONFIG=/etc/kubernetes/admin.conf

(5)安装自动补全工具

yum install -y bash-completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source  ~/.bashrc

(6)主节点添加污点taint

单节点时,需要主节点添加污点taint,允许master节点运行pod

kubectl taint nodes --all node-role.kubernetes.io/master
kubectl taint nodes --all node-role.kubernetes.io/master-node/k8s-master untainted
kubectl taint node k8s-singlenode node-role.kubernetes.io/master-
kubectl taint nodes k8s-singlenode node-role.kubernetes.io/master=:NoSchedule

参考链接: 为k8s-master节点添加污点taints

查看节点信息

kubectl get cs
kubectl get csr
kubectl get nodes

修改yaml配置文件
k8s-master节点主节点,注释下面文件中相应的行。

vim /etc/kubernetes/manifests/kube-controller-manager.yaml +26
vim /etc/kubernetes/manifests/kube-scheduler.yaml +19

systemctl restart kubelet.service

主、从节点

kubectl get pods --all-namespaces

kubectl get cs
kubectl get csr
kubectl get nodes

(7)安装Pod网络

接下来我们来安装flannel网络插件,很简单,和安装普通的 POD 没什么两样:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f  kube-flannel.yml

or

kubectl apply -f  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sleep 100s

安装完成后使用 kubectl get pods 命令可以查看到我们集群中的组件运行状态,如果都是Running 状态的话,那么恭喜你,你的 master 节点安装成功了。

kubectl get cs
kubectl get csr
kubectl get nodes
systemctl restart kubelet
systemctl restart docker
kubectl get pods --all-namespaces

kubectl get cs
kubectl get csr
kubectl get nodes

kubectl version
systemctl status kubelet

0x02部署应用

0x03Kubernetes Dashboard

1.安装Kubernetes Dashboard

安装

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml
kubectl apply -f recommended.yaml

or

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml
sleep 100s
kubectl -n kubernetes-dashboard get pods
kubectl -n kubernetes-dashboard get svc 

排错参考记录dial tcp 10.96.0.1:443: i/o timeout

主节点dashboard
https://zuozewei.blog.csdn.net/article/details/108193351
https://blog.csdn.net/l13568/article/details/113606606
https://github.com/rootsongjc/kubernetes-handbook/issues/92

kubectl cluster-info

kubectl -n kubernetes-dashboard get service kubernetes-dashboard
kubectl get pods --all-namespaces -o wide

2.访问端口映射

kubectl  patch svc kubernetes-dashboard \
-n kubernetes-dashboard \
-p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30443}]}}'

再给从节点开机

3.创建用户登录凭证

生成凭证

cat > dashboard-adminuser.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kube-system

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: admin
    namespace: kube-system
EOF
kubectl apply -f dashboard-adminuser.yaml

查看密钥

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin | awk '{print $1}')

4.访问dashboard

使用前一步输出的秘钥
https://192.168.2.107:30443/

参考链接
https://blog.csdn.net/cd_yourheart/article/details/108766912
https://blog.csdn.net/qq_45453266/article/details/109897843
https://blog.csdn.net/weixin_42182501/article/details/104347303
https://blog.csdn.net/happyzwh/article/details/86063807

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Kubernetes部署HBase单机,可以使用StatefulSet。以下是一个简单的步骤: 1. 创建一个配置文件hbase-config.yaml: ``` apiVersion: v1 kind: ConfigMap metadata: name: hbase-config data: hbase-site.xml: | <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.rootdir</name> <value>file:///hbase</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>hbase-zookeeper-0.hbase-zookeeper.default.svc.cluster.local,hbase-zookeeper-1.hbase-zookeeper.default.svc.cluster.local,hbase-zookeeper-2.hbase-zookeeper.default.svc.cluster.local</value> </property> </configuration> ``` 2. 创建一个Headless Service: ``` apiVersion: v1 kind: Service metadata: name: hbase-headless spec: clusterIP: None selector: app: hbase ports: - name: thrift port: 9090 - name: rest port: 8080 ``` 3. 创建一个StatefulSet: ``` apiVersion: apps/v1 kind: StatefulSet metadata: name: hbase spec: serviceName: hbase-headless replicas: 1 selector: matchLabels: app: hbase template: metadata: labels: app: hbase spec: containers: - name: hbase image: hbase:2.2.4 command: - sh - -c - "echo 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse' >> /etc/apt/sources.list && apt-get update && apt-get install -y netcat && /opt/hbase/bin/start-hbase.sh && tail -f /opt/hbase/logs/*" ports: - containerPort: 9090 name: thrift - containerPort: 8080 name: rest volumeMounts: - name: hbase-data mountPath: /hbase - name: hbase-config mountPath: /opt/hbase/conf/hbase-site.xml subPath: hbase-site.xml volumes: - name: hbase-data persistentVolumeClaim: claimName: hbase-data - name: hbase-config configMap: name: hbase-config ``` 4. 创建一个PersistentVolumeClaim: ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: hbase-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` 上述配置文件中,假设已经有一个Zookeeper集群,名称为hbase-zookeeper,并且已经部署Kubernetes中。在上述配置文件中,使用了HBase 2.2.4本的镜像。在容器启动时,首先安装netcat,然后启动HBase,并保持日志输出。注意,hbase-site.xml文件被挂载到容器中。 以上是一个简单的部署HBase单机的示例。根据实际情况,可能需要进行一些修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北观止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值