记得刚接触Rancher时,看了官方文档云里雾里,跟着官网文档部署了高可用Rancher,发现不管怎么折腾都无法部署成功(相信已尝试的朋友也有类似的感觉),今天腾出空来写个总结,给看到的朋友留个参考(亲测可用!按照下面步骤操作不会出现部署超时、部署完成后无法打开等问题)。

也许有人会问:什么是RANCHER?套用官网的话:Rancher 是为使用容器的公司打造的容器管理平台。

也许有人又会问:用K8s不香吗,为什么要加一层RANCHER?其实K8s是比较复杂的,尤其是各组件的版本选择以及大规模的使用场景上,需要一个管理平台降低容器化落地的复杂度。

【说明】:

  • 当前Rancher版本为:V2.5.5 ;
  • 若只想通过Docker安装单机版体验,可执行:
  1. docker run -d --privileged --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher:latest 
  • 下面部署的Rancher集群证书均使用自签名私有证书。
  • 中文官网文档:https://docs.rancher.cn/rancher2/ 。
  • 通过Rancher导入K8s集群时,需要预先在目标服务器上安装Docker,Docker的安装请参考【附录】。

【规划】:

  • 用2台centos7部署k3s+rancher(做高可用),IP分别为:192.168.21.30,192.168.21.31;
  • 用1台centos部署mysql5.7存储rancher数据,同时部署nginx代理2台rancher,IP为:192.168.20.101;
  • 配置dns域名:rancher.test.cn - 192.168.20.101 ;

【安装K3s(K8s)】

  说明:什么是K3s?K3s是K8s的精简版,很多时候我们并不需要用到K8s的所有功能,Rancher公司帮我们做了一款精简版的K8s,即K3s,推荐在K3s上部署Rancher。  

  一、准备工作

  1. 内核升级:

    建议所有K8s节点(包括K3s、k8s master worker节点)内核均升级到最新稳定版(目前是kernel5.4),好处请自行Google。

    centos7内核升级步骤:
  1. # 载入公钥
  2. rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  3. # 安装ELRepo
  4. rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
  5. # 载入elrepo-kernel元数据
  6. yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
  7. # 查看可用的rpm包
  8. yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel*
  9. # 安装长期支持版本的kernel
  10. yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt.x86_64
  11. # 删除旧版本工具包
  12. yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y
  13. # 安装新版本工具包
  14. yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt-tools.x86_64
  15.  
  16. #查看默认启动顺序
  17. awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
  18. CentOS Linux (4.4.183-1.el7.elrepo.x86_64) 7 (Core)
  19. CentOS Linux (3.10.0-327.10.1.el7.x86_64) 7 (Core)
  20. CentOS Linux (0-rescue-c52097a1078c403da03b8eddeac5080b) 7 (Core)
  21. #默认启动的顺序是从0开始,新内核是从头插入(目前位置在0,而4.4.4的是在1),所以需要选择0。
  22. grub2-set-default 0
  23. #重启并检查
  24. reboot

  2. 修改主机名:

  1. hostnamectl set-hostname k3s01
  2. echo "127.0.0.1 k3s01" >> /etc/hosts

  3. 配置dns或者在每台服务器及个人电脑上添加hosts解析(192.168.20.101  rancher.test.cn);

  4. 2台rancher节点上安装helm

  1. wget http://rancher-mirror.cnrancher.com/helm/v3.4.2/helm-v3.4.2-linux-amd64.tar.gz
  2. tar zxf helm-v3.4.2-linux-amd64.tar.gz
  3. cp linux-amd64/helm /usr/local/sbin/

  5. 部署mysql5.7(具体请百度),创建"rancher"库,创建用户rancher,密码为rancher,mysql端口为61306。

  6. 部署nginx(我是直接在mysql5.7服务器上部署,即IP为192.168.20.101这台机器),代理配置如下:

  1. [root@rancher-proxy ~]# cat /etc/nginx/nginx.conf
  2. worker_processes 4;
  3. worker_rlimit_nofile 40000;
  4.  
  5. include /usr/share/nginx/modules/*.conf;
  6.  
  7. events {
  8. worker_connections 8192;
  9. }
  10.  
  11. stream {
  12. upstream rancher_servers_http {
  13. least_conn;
  14. server 192.168.21.30:80 max_fails=3 fail_timeout=5s;
  15. server 192.168.21.31:80 max_fails=3 fail_timeout=5s;
  16. }
  17. server {
  18. listen 80;
  19. proxy_pass rancher_servers_http;
  20. }
  21.  
  22. upstream rancher_servers_https {
  23. least_conn;
  24. server 192.168.21.30:443 max_fails=3 fail_timeout=5s;
  25. server 192.168.21.31:443 max_fails=3 fail_timeout=5s;
  26. }
  27. server {
  28. listen 443;
  29. proxy_pass rancher_servers_https;
  30. }
  31.  
  32. upstream rancher_servers_k8sapi {
  33. least_conn;
  34. server 192.168.21.30:6443 max_fails=3 fail_timeout=5s;
  35. server 192.168.21.31:6443 max_fails=3 fail_timeout=5s;
  36. }
  37. server {
  38. listen 6443;
  39. proxy_pass rancher_servers_k8sapi;
  40. }
  41. }

  二、部署K3s

  1. 分别在2台Rancher节点上,运行以下命令以启动 K3s Server 并将其连接到外部数据库:

  1. curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_EXEC="--tls-san rancher.test.cn" INSTALL_K3S_MIRROR=cn sh -s - server --datastore-endpoint="mysql://rancher:rancher@tcp(192.168.20.101:61306)/rancher"
  说明:需要增加 INSTALL_K3S_EXEC="--tls-san rancher.test.cn" 这段,否则集群证书不认rancher.test.cn或者对应的IP

  2. k3s创建成功确认

  分别在2台节点上确认k3s是否创建成功:
  1. k3s kubectl get nodes
  测试集群容器的运行状况:
  1. k3s kubectl get pods --all-namespaces
  此时会发现系统一直在创建镜像(网络超时),需要对容器加速。请参考第4步(镜像加速)。
 
  3. 保存并使用 kubeconfig 文件:
  备份/etc/rancher/k3s/k3s.yaml,并将其拷贝一份命名成~/.kube/config:
  1. cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
  修改~/.kube/config配置文件中的server参数为rancher.test.cn,如下:
  1. [root@k3s02 ~]# cat ~/.kube/config
  2. apiVersion: v1
  3. clusters:
  4. - cluster:
  5. ……
  6. server: https://rancher.test.cn:6443
  7. ……

  结果: 您现在可以使用kubectl来管理您的 K3s 集群。如果您有多个 kubeconfig 文件,可以在使用kubectl时通过传递文件路径来指定要使用的kubeconfig文件:

  1. kubectl --kubeconfig ~/.kube/config get pods --all-namespaces

  4. 镜像加速

  1. cat >> /etc/rancher/k3s/registries.yaml <<EOF
  2. mirrors:
  3. "docker.io":
  4. endpoint:
  5. - "https://fogjl973.mirror.aliyuncs.com"
  6. - "https://registry-1.docker.io"
  7. EOF
  8.  
  9. systemctl restart k3s
  再次执行下面命令,查看pod状态,发现各镜像开始下载:
  1. k3s kubectl get pods --all-namespaces

安装RANCHER】

  1. 在2台k3s节点上确保安装下面CLI工具:
  • kubectl - Kubernetes 命令行工具;
  • helm,可到helm官网下载二进制包直接使用;
 
  2. 添加 Helm Chart 仓库:
  1. helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
  3.为 Rancher 创建 Namespace:
  1. kubectl create namespace cattle-system
 
  4.使用私有自签名证书:
  使用自签名证书可以不用安装cert-manager,从而避免安装cert-manager很慢。
  创建自动创建证书的脚本(脚本内容摘抄自Rancher官网,命名为create_self-signed-cert.sh):
  1. #!/bin/bash -e
  2.  
  3. help ()
  4. {
  5. echo ' ================================================================ '
  6. echo ' --ssl-domain: 生成ssl证书需要的主域名,如不指定则默认为www.rancher.local,如果是ip访问服务,则可忽略;'
  7. echo ' --ssl-trusted-ip: 一般ssl证书只信任域名的访问请求,有时候需要使用ip去访问server,那么需要给ssl证书添加扩展IP,多个IP用逗号隔开;'
  8. echo ' --ssl-trusted-domain: 如果想多个域名访问,则添加扩展域名(SSL_TRUSTED_DOMAIN),多个扩展域名用逗号隔开;'
  9. echo ' --ssl-size: ssl加密位数,默认2048;'
  10. echo ' --ssl-cn: 国家代码(2个字母的代号),默认CN;'
  11. echo ' 使用示例:'
  12. echo ' ./create_self-signed-cert.sh --ssl-domain=www.test.com --ssl-trusted-domain=www.test2.com \ '
  13. echo ' --ssl-trusted-ip=1.1.1.1,2.2.2.2,3.3.3.3 --ssl-size=2048 --ssl-date=3650'
  14. echo ' ================================================================'
  15. }
  16.  
  17. case "$1" in
  18. -h|--help) help; exit;;
  19. esac
  20.  
  21. if [[ $1 == '' ]];then
  22. help;
  23. exit;
  24. fi
  25.  
  26. CMDOPTS="$*"
  27. for OPTS in $CMDOPTS;
  28. do
  29. key=$(echo ${OPTS} | awk -F"=" '{print $1}' )
  30. value=$(echo ${OPTS} | awk -F"=" '{print $2}' )
  31. case "$key" in
  32. --ssl-domain) SSL_DOMAIN=$value ;;
  33. --ssl-trusted-ip) SSL_TRUSTED_IP=$value ;;
  34. --ssl-trusted-domain) SSL_TRUSTED_DOMAIN=$value ;;
  35. --ssl-size) SSL_SIZE=$value ;;
  36. --ssl-date) SSL_DATE=$value ;;
  37. --ca-date) CA_DATE=$value ;;
  38. --ssl-cn) CN=$value ;;
  39. esac
  40. done
  41.  
  42. # CA相关配置
  43. CA_DATE=${CA_DATE:-3650}
  44. CA_KEY=${CA_KEY:-cakey.pem}
  45. CA_CERT=${CA_CERT:-cacerts.pem}
  46. CA_DOMAIN=cattle-ca
  47.  
  48. # ssl相关配置
  49. SSL_CONFIG=${SSL_CONFIG:-$PWD/openssl.cnf}
  50. SSL_DOMAIN=${SSL_DOMAIN:-'www.rancher.local'}
  51. SSL_DATE=${SSL_DATE:-3650}
  52. SSL_SIZE=${SSL_SIZE:-2048}
  53.  
  54. ## 国家代码(2个字母的代号),默认CN;
  55. CN=${CN:-CN}
  56.  
  57. SSL_KEY=$SSL_DOMAIN.key
  58. SSL_CSR=$SSL_DOMAIN.csr
  59. SSL_CERT=$SSL_DOMAIN.crt
  60.  
  61. echo -e "\033[32m ---------------------------- \033[0m"
  62. echo -e "\033[32m | 生成 SSL Cert | \033[0m"
  63. echo -e "\033[32m ---------------------------- \033[0m"
  64.  
  65. if [[ -e ./${CA_KEY} ]]; then
  66. echo -e "\033[32m ====> 1. 发现已存在CA私钥,备份"${CA_KEY}"为"${CA_KEY}"-bak,然后重新创建 \033[0m"
  67. mv ${CA_KEY} "${CA_KEY}"-bak
  68. openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
  69. else
  70. echo -e "\033[32m ====> 1. 生成新的CA私钥 ${CA_KEY} \033[0m"
  71. openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
  72. fi
  73.  
  74. if [[ -e ./${CA_CERT} ]]; then
  75. echo -e "\033[32m ====> 2. 发现已存在CA证书,先备份"${CA_CERT}"为"${CA_CERT}"-bak,然后重新创建 \033[0m"
  76. mv ${CA_CERT} "${CA_CERT}"-bak
  77. openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
  78. else
  79. echo -e "\033[32m ====> 2. 生成新的CA证书 ${CA_CERT} \033[0m"
  80. openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
  81. fi
  82.  
  83. echo -e "\033[32m ====> 3. 生成Openssl配置文件 ${SSL_CONFIG} \033[0m"
  84. cat > ${SSL_CONFIG} <<EOM
  85. [req]
  86. req_extensions = v3_req
  87. distinguished_name = req_distinguished_name
  88. [req_distinguished_name]
  89. [ v3_req ]
  90. basicConstraints = CA:FALSE
  91. keyUsage = nonRepudiation, digitalSignature, keyEncipherment
  92. extendedKeyUsage = clientAuth, serverAuth
  93. EOM
  94.  
  95. if [[ -n ${SSL_TRUSTED_IP} || -n ${SSL_TRUSTED_DOMAIN} ]]; then
  96. cat >> ${SSL_CONFIG} <<EOM
  97. subjectAltName = @alt_names
  98. [alt_names]
  99. EOM
  100. IFS=","
  101. dns=(${SSL_TRUSTED_DOMAIN})
  102. dns+=(${SSL_DOMAIN})
  103. for i in "${!dns[@]}"; do
  104. echo DNS.$((i+1)) = ${dns[$i]} >> ${SSL_CONFIG}
  105. done
  106.  
  107. if [[ -n ${SSL_TRUSTED_IP} ]]; then
  108. ip=(${SSL_TRUSTED_IP})
  109. for i in "${!ip[@]}"; do
  110. echo IP.$((i+1)) = ${ip[$i]} >> ${SSL_CONFIG}
  111. done
  112. fi
  113. fi
  114.  
  115. echo -e "\033[32m ====> 4. 生成服务SSL KEY ${SSL_KEY} \033[0m"
  116. openssl genrsa -out ${SSL_KEY} ${SSL_SIZE}
  117.  
  118. echo -e "\033[32m ====> 5. 生成服务SSL CSR ${SSL_CSR} \033[0m"
  119. openssl req -sha256 -new -key ${SSL_KEY} -out ${SSL_CSR} -subj "/C=${CN}/CN=${SSL_DOMAIN}" -config ${SSL_CONFIG}
  120.  
  121. echo -e "\033[32m ====> 6. 生成服务SSL CERT ${SSL_CERT} \033[0m"
  122. openssl x509 -sha256 -req -in ${SSL_CSR} -CA ${CA_CERT} \
  123. -CAkey ${CA_KEY} -CAcreateserial -out ${SSL_CERT} \
  124. -days ${SSL_DATE} -extensions v3_req \
  125. -extfile ${SSL_CONFIG}
  126.  
  127. echo -e "\033[32m ====> 7. 证书制作完成 \033[0m"
  128. echo
  129. echo -e "\033[32m ====> 8. 以YAML格式输出结果 \033[0m"
  130. echo "----------------------------------------------------------"
  131. echo "ca_key: |"
  132. cat $CA_KEY | sed 's/^/ /'
  133. echo
  134. echo "ca_cert: |"
  135. cat $CA_CERT | sed 's/^/ /'
  136. echo
  137. echo "ssl_key: |"
  138. cat $SSL_KEY | sed 's/^/ /'
  139. echo
  140. echo "ssl_csr: |"
  141. cat $SSL_CSR | sed 's/^/ /'
  142. echo
  143. echo "ssl_cert: |"
  144. cat $SSL_CERT | sed 's/^/ /'
  145. echo
  146.  
  147. echo -e "\033[32m ====> 9. 附加CA证书到Cert文件 \033[0m"
  148. cat ${CA_CERT} >> ${SSL_CERT}
  149. echo "ssl_cert: |"
  150. cat $SSL_CERT | sed 's/^/ /'
  151. echo
  152.  
  153. echo -e "\033[32m ====> 10. 重命名服务证书 \033[0m"
  154. echo "cp ${SSL_DOMAIN}.key tls.key"
  155. cp ${SSL_DOMAIN}.key tls.key
  156. echo "cp ${SSL_DOMAIN}.crt tls.crt"
  157. cp ${SSL_DOMAIN}.crt tls.crt

  生成证书:

  1. ./create_self-signed-cert.sh --ssl-domain=rancher.test.cn --ssl-trusted-domain=rancher.test.cn --ssl-trusted-ip=192.168.20.101,192.168.21.30,192.168.21.31 --ssl-size=2048 --ssl-date=3650
  生效:
  1. kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=tls.crt --key=tls.key
  2. kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem=./cacerts.pem
 
  5.通过Helm安装Rancher
  1. helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=rancher.test.cn --set ingress.tls.source=secret --set privateCA=true
  说明:若执行该步骤遇到报错:
  1. Error: Kubernetes cluster unreachable: Get "http://localhost:8080/version?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused

  可以执行下面步骤:

  1. export KUBECONFIG=~/.kube/config

  检查:

  1. kubectl get pods --all-namespaces
  2. helm ls --all-namespaces
 
  6.验证 Rancher Server 是否已成功部署:
  检查 Rancher Server 是否运行成功:
  1. kubectl -n cattle-system rollout status deploy/rancher
  若出现下面信息(successfully rolled out)则表示成功,否则继续等待:
  1. Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
  2. deployment "rancher" successfully rolled out

  检查 deployment 的状态:

  1. kubectl -n cattle-system get deploy rancher
  若出现下面信息则表示安装成功(DESIRED和AVAILABLE应该显示相同的个数):
  1. NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
  2. rancher 3 3 3 3 3m

恭喜!

  到此安装完成,可以通过浏览器访问 http://rancher.test.cn
  激动人心的时刻!

感谢RANCHER公司为我们提供了这款开源、简洁易用、功能强大的容器管理平台!

【附录】
安装Docker:
  1. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  2. wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
  3. yum install docker-ce -y
  4. docker --version
  5. sudo systemctl start docker
  6. sudo systemctl enable docker
  7. sudo systemctl status docker

容器加速:

  1. [root@rancher-work02 ~]# cat /etc/docker/daemon.json
  2. {
  3. "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
  4. }

生效容器加速配置:

  1. systemctl daemon-reload
  2. systemctl restart docker

恭喜!

Docker安装完毕。

Docker容器管理平台Rancher高可用部署——看这篇就够了的更多相关文章

  1. CDH构建大数据平台-Kerberos高可用部署【完结篇】

    CDH构建大数据平台-Kerberos高可用部署[完结篇] 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.安装Kerberos相关的软件包并同步配置文件 1>.实验环境 ...

  2. 企业级容器管理平台 Rancher 介绍入门及如何备份数据

    企业级容器管理平台 Rancher 介绍入门及如何备份数据 是什么 Rancher 是一个为 DevOps 团队提供的完整的 Kubernetes 与容器管理解决方案的开源的企业级容器管理平台.它解决 ...

  3. [转帖]devops 容器管理平台 rancher 简介

    https://testerhome.com/topics/10828 chenhengjie123 for PPmoney · 2017年11月13日 · 最后由 c19950809 回复于 201 ...

  4. Docker 容器管理:rancher

    Rancher:https://www.cnrancher.com/ 是一个开源的企业级全栈化容器部署及管理平台. 定位上和 K8s 比较接近,都是通过 web 界面赋予完全的 docker 服务编排 ...

  5. Docker容器管理平台Humpback进阶-私有仓库

    Docker私有仓库 在 Docker 中,当我们执行 docker pull xxx 的时候,可能会比较好奇,docker 会去哪儿查找并下载镜像呢? 它实际上是从 registry.hub.doc ...

  6. 物联网架构成长之路(45)-容器管理平台Rancher

    0.前言 按照上一篇博客,我已经把需要下载的rancher docker 依赖镜像下载上传到Harbor了. 1. 安装 执行如下,实现一键安装 docker run -d --restart=unl ...

  7. 【OGG】 RAC环境下管理OGG的高可用 (五)

    [OGG] RAC环境下管理OGG的高可用 (五) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道 ...

  8. 微服务下的容器部署和管理平台Rancher

    Rancher是什么 Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台.Rancher提供了在生产环境中使用的管理Docke ...

  9. 【Docker】Docker管理平台 Rancher ---- 你应该学学Rancher是怎么做容器的管理的

    Elasticsearch is a Lucene-based search engine developed by the open-source vendor, elastic. With pri ...

随机推荐

  1. 学习笔记之Python人机交互小项目一:名字管理系统

    2020是一个不平凡的一年,但即使挫折不断,我们每学期的课程实训也没有受到影响,仍旧如期实施.与往年不同的是,今年的实训老师是学校邀请的公司在职人员来给我们实训.今年实训的内容是Python语言,下面 ...

  2. Java中定时器Timer致命缺点(附学习方法)

    简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...

  3. hadoop目录结构

    Hadoop目录结构 重要目录结构: bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本 etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件 lib目录:存放H ...

  4. ORA-28001: the password has expired解决方法

    Oracle提示错误消息ORA-28001: the password has expired,是由于Oracle11G的新特性所致, Oracle11G创建用户时缺省密码过期限制是180天(即6个月 ...

  5. 一网打尽,一文讲通虚拟机VirtualBox及Linux使用

    本文将从虚拟机的选择.安装.Linux系统安装.SSH客户端工具使用四个方面来详细介绍Linux系统在虚拟机下的安装及使用方法,为你在虚拟机下正常使用Linux保驾护航. 1.虚拟机的选择 在讲虚拟机 ...

  6. Vue css过渡 和 js 钩子过渡

    css过渡 <transition name="slide"> <div v-show="!showChatInput" class=&quo ...

  7. 使用 C# 9 的records作为强类型ID - 初次使用

    强类型ID 实体通常是整数,GUID或者string类型,因为数据库直接支持这些类型,但是,如果实体的ID的类型是一样的,比如都是整数的ID,这有可能会出现ID值传错的问题,看下边的示例. publi ...

  8. intellij idea2020将javaWeb项目打成war包并部署到阿里云服务器遇到java.lang. UnsupportedClass VersionError问题(已解决)

    首先将javaweb项目打包成war文件(有关如何打包参考 https://jingyan.baidu.com/article/20b68a88642829386cec62f7.html.https: ...

  9. ps ww

    [root@ma ~]# ps ww -p 1 PID TTY STAT TIME COMMAND 1 ? Ss 0:01 /sbin/init[root@ma ~]# ps -p 1 PID TTY ...

  10. 【Linux】CentOS7中修改中文字符集

    CentOS 7中字符集查看的方式是 locale -a   或者locale 如果想显示中文的话,应该修改为 LANG="zh_CN.UTF-8" 在命令行界面临时修改字符集的话 ...